KnockoutJS - 仅在初始化后触发订阅

时间:2013-01-14 01:48:46

标签: knockout.js

我有一种情况,我希望在观察到更改时执行任务,因此我设置了订阅 - 但是我不希望在创建项目时向右触发。

http://jsfiddle.net/ciel/EeZjH/

基本上,当每个项目从控制器进入时,已经为每个项目设置了“绑定” - 所以我不想发布更改。只有当它们从初始值变化时才会改变。这有道理吗?

function Item(data) {
  this.Binding = ko.observable(data);

  this.Binding.subscribe(function (newValue) {
    console.log("The Binding is Now " + newValue);
  });
}

var viewModel = {
  Options: ko.observableArray([{
    "Value": "1",
      "Name": "One"
  }, {
    "Value": "2",
      "Name": "Two"
  }, {
    "Value": "3",
      "Name": "Three"
  }]),
  Items: ko.observableArray([])
};

viewModel.Items.push(new Item("1"));
viewModel.Items.push(new Item("2"));
viewModel.Items.push(new Item("3"));

viewModel.output = ko.computed(function () {
  return JSON.stringify(
  viewModel.Items().map(

  function (i) {
    return i.Binding();
  }));
});

ko.applyBindings(viewModel);

1 个答案:

答案 0 :(得分:1)

ko.observable.fn.beforeAndAfterSubscribe = function (callback, target) {
 var _oldValue;
 this.subscribe(function (oldValue) {
     _oldValue = oldValue;
 }, null, 'beforeChange');
   this.subscribe(function (newValue) {
     callback.call(target, _oldValue, newValue);
 });
};