我在 KO bindingHandler 中使用 jquery 手风琴,我必须填充手风琴 UI 使用的 DOM,根据应用程序要求使用 ajax。
this.faqList = ko.observableArray();
$.ajax({
url: 'getFaqs'
}).done(function( data ) {
that.faqList(data);
});
我的 bindingHandler 应该像
ko.bindingHandlers.koAccordion = {
init: function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
$(element).accordion(valueAccessor());
},
update: function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
$(element).accordion(valueAccessor());
}
};
当 observableArray (faqList) 发生变化时调用 update 方法,但此时 UI 手风琴需要已经填充的 DOM 结构,这是不正确的,似乎 KO 在调用 update 方法后创建。在 DOM 结构中填充新内容后,如何实现调用更新?
这是默认的 DOM。
<ul class="question-list" data-bind="koAccordion: {
active: false,
autoHeight: false,
collapsible: true}">
<!-- ko foreach: faqList -->
<li>
<div class="header">
<span class="rigth-arrow"></span>
<a href="#" data-bind="text: title"></a>
</div>
<div class="content">
<h2 data-bind="text: title"></h2>
<div data-bind="text: content"></div>
</div>
</li>
<!-- /ko -->
</ul>