【发布时间】:2013-08-07 01:23:31
【问题描述】:
我在 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>
CodePen
【问题讨论】:
-
我添加了一个演示。有什么问题?它似乎有效。
-
不是真的,手风琴创建了 UI 类,但事件没有绑定。
标签: ajax jquery-ui knockout.js bindinghandlers