Как я могу создать аккордеон с помощью нокаута JS?

Добавление следующего пользовательского обработчика привязки, похоже, ломает аккордеон, это связано с версией нокаута?

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

}


person Tui Popenoe    schedule 10.06.2013    source источник
comment
Что в нем сломано? Какие-то ошибки в консоли?   -  person woz    schedule 10.06.2013


Ответы (1)


После обновления до Knockout 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);
    }
}
person Tui Popenoe    schedule 10.06.2013