我们正在尝试使用嵌套手风琴构建一个数据驱动的列表。在我们的第一个原型中,它运行良好,但我们对实现进行了硬编码,并且有明显不同的手风琴。
现在,当我们开始动态加载时,看起来结构就在那里,但我们不再有不同的手风琴,所以它们不会独立运行。有什么我们可以添加到自定义绑定中来使其工作的东西吗?或者我们可以设置一些其他属性来保持子手风琴分开。
这个例子只嵌套了 2 层,但我们最终需要支持 4 层。
这是当前的原型:http: //jsfiddle.net/blunde/agjFn/
我们正在尝试使用嵌套手风琴构建一个数据驱动的列表。在我们的第一个原型中,它运行良好,但我们对实现进行了硬编码,并且有明显不同的手风琴。
现在,当我们开始动态加载时,看起来结构就在那里,但我们不再有不同的手风琴,所以它们不会独立运行。有什么我们可以添加到自定义绑定中来使其工作的东西吗?或者我们可以设置一些其他属性来保持子手风琴分开。
这个例子只嵌套了 2 层,但我们最终需要支持 4 层。
这是当前的原型:http: //jsfiddle.net/blunde/agjFn/
这是一个 JSFiddle,我相信它可以解决您遇到的问题。
http://jsfiddle.net/JasonMore/gbhfT/6/
看法
<div data-bind="foreach: items, accordion: {}">
<h3>
<a href="#" data-bind="text: id"></a>
</h3>
<div>
<span data-bind="text: name"></span>
<div data-bind="foreach: items, accordion: {}">
<h3>
<a href="#" data-bind="text: id"></a>
</h3>
<div data-bind="text: name">
</div>
</div>
<button data-bind="click: add">Add Sub Item</button>
</div>
</div>
<button data-bind="click: add">Add Item</button>
<hr/>
Javascript
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);
}
}
function Item(id, name, subItems) {
var self = this;
//properties
this.id = ko.observable(id);
this.name = ko.observable(name);
this.items = ko.observableArray(subItems);
//actions
this.add = function() {
self.items.push(new Item(4, "bar"));
};
}
var viewModel = {
items: ko.observableArray([
new Item(1, "one",
[
new Item(11, "one-one"),
new Item(12, "one-two")
]),
new Item(2, "two", []),
new Item(3, "three", [])
]),
add: function() {
viewModel.items.push(new Item(4, "foo"));
}
};
ko.applyBindings(viewModel);
</p>
通过将 foreach 更改为模板,您应该能够使这项工作深入 n 级。 http://knockoutjs.com/documentation/template-binding.html
我希望这有帮助!
杰森