1

次のカスタム バインディング ハンドラーを追加すると、アコーディオンが壊れているように見えますが、これはノックアウトのバージョンによるものですか?

ko.bindingHandlers.accordion = {
init: function(element, valueAccessor) {
    var options = valueAccessor() || {};
    setTimeout(function() {
        $(element).accordion(options);
    }, 0);

    //handle disposal (if KO removes by the template binding)
      ko.utils.domNodeDisposal.addDisposeCallback(element, function(){
          $(element).accordion("destroy");
      });
},
update: function(element, valueAccessor) {
    var options = valueAccessor() || {};
    $(element).accordion("destroy").accordion(options);
}

}

4

1 に答える 1

1

ノックアウト 2.2 への更新後、アコーディオンのカスタム バインディング ハンドラーは updateOn への参照を持つ必要があるため、アコーディオンのすべてのイベントに対して過剰なバインディングが呼び出されることはありません。

   <ul data-bind="foreach: items, accordion:{updateOn: items}"></ul>

   ko.bindingHandlers.accordion = {
    init: function(element, valueAccessor) {
        var options = valueAccessor() || {};
        setTimeout(function() {
            $(element).accordion(options);
        }, 0);

        //handle disposal (if KO removes by the template binding)
          ko.utils.domNodeDisposal.addDisposeCallback(element, function(){
              $(element).accordion("destroy");
          });
    },
    update: function(element, valueAccessor) {
        var options = valueAccessor() || {};
        if (options.updateOn && ko.isObservable(options.updateOn)) {
            options.updateOn();
        }
        $(element).accordion("destroy").accordion(options);
    }
}
于 2013-06-10T14:35:29.020 に答える