给定一个 Knockout observableArray,可以添加和删除哪些项目,我如何使用 Isotope 布置相应的 HTML 元素?例如,考虑以下 HTML,它声明了一个 div ,该 div#container
应该由 Knockout 填充子 div:
<div id="container" data-bind="foreach: items, click: addItem">
<div class="item show" data-bind="text: text, click: $parent.removeItem, clickBubble: false"></div>
随附的 JavaScript 使用几个项目预填充容器,并允许用户单击项目以删除它们并单击容器以添加新项目(通过 Knockout):
function ItemModel(parent) {
var value, self = this,
found;
for (value = 0; value < parent.items().length; ++value) {
found = false;
for (i in parent.items()) {
var item = parent.items()[i];
if (item.value() == value) {
found = true;
break;
}
}
if (!found) {
break;
}
}
this.value = ko.observable(value);
this.text = ko.computed(function () {
return "Item " + self.value();
});
}
var ViewModel = function () {
var self = this;
self.items = ko.observableArray()
self.items.push(new ItemModel(self));
self.items.push(new ItemModel(self));
this.removeItem = function (item) {
self.items.remove(item);
return false;
};
this.addItem = function () {
self.items.push(new ItemModel(self));
};
};
ko.applyBindings(new ViewModel("Test"));
当与 Isotope 正确耦合时,Isotope 应自动布置项目,包括何时删除、添加和移动项目。
有关该概念的演示,请参见this fiddle。