Как мога да създам акордеон с помощта на knockout 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