2013-06-10 1 views
1

다음 사용자 지정 바인딩 처리기를 추가하면 아코디언이 깨지는 것 같습니다. 이것이 녹아웃 버전 때문입니까?녹아웃 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); 
} 

}

+1

무엇이 잘못된 것입니까? 콘솔에 오류가 있습니까? – woz

답변

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