0

カスタムバインディングの作成に問題があります。私が理解していることから、バインディングの更新コールバックは、ビューモデルが変更されるたびに発生するはずです。

小さな例を作成しました。

http://jsfiddle.net/alexmaie/pbEmS/

  ko.bindingHandlers.testBinding = {

     update: function(element, valueAccessor, allBindingsAccessor, viewModel,       bindingContext) {
//just for testing purposes
     alert("update");
  }
};

$(document).ready(function() {
function AppViewModel() {
    var self = this;
    self.firstName = ko.observable("Bert");

}
ko.applyBindings(new AppViewModel());
});​

そこで、ボタンにバインディングを取り付けます。バインディングの更新は一度実行され、その後、オブザーバブルのデータを変更しても、二度と実行されません。

このアプローチを使用して、canExecuteバインディングを実装したいと思います。

4

1 に答える 1

1

バインディングはの内部に実装されているcomputed observableため、実際にアクセスされるオブザーバブル/計算に基づいて依存関係を追跡します。

つまり、これは、update関数で、次のように渡されたオブザーバブルの値にアクセスする必要があることを意味します。

   ko.bindingHandlers.testBinding = {   
      update: function(element, valueAccessor) {
         //dependency is created here
         var value = ko.utils.unwrapObservable(valueAccessor());
         alert("update " + value);
      }
   }

更新されたフィドル:http://jsfiddle.net/rniemeyer/pbEmS/2/

于 2013-01-04T20:56:10.393 に答える