アイテムを追加および削除できる Knockout observableArray が与えられた場合、対応する HTML 要素を Isotope でレイアウトするにはどうすればよいですか? たとえば、#container
Knockout によって子 div を設定する必要がある div を宣言する次の HTML を考えてみましょう。
<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 によって自動的に配置されます。
コンセプトのデモについては、このフィドルを参照してください。