3

オブザーバブルが変更されたときにタスクを実行したい状況があるため、サブスクリプションを設定しましたが、アイテムが作成されたときにこれを起動したくありません。

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);
4

1 に答える 1

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);
 });
}; 
于 2013-03-03T14:46:15.090 に答える