Учитывая наблюдаемый массив Knockout, в который можно добавлять и удалять элементы, как мне разместить соответствующие элементы HTML с помощью Isotope? Рассмотрим, например, следующий HTML-код, в котором объявляется div #container
, который должен быть заполнен дочерними div с помощью Knockout:
<div id="container" data-bind="foreach: items, click: addItem">
<div class="item show" data-bind="text: text, click: $parent.removeItem, clickBubble: false"></div>
The accompanying JavaScript pre-populates the container with a couple of items, and lets the user click on items to delete them and click in the container to add new items (via 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, в том числе при удалении, добавлении и перемещении элементов.
См. эту скрипту для демонстрации концепции.