我有一個外部模板,它調用JSON對象來填充divs的細節。在所有項目被添加到DOM之後,我正在努力爭取一些jQuery啓動(尋找使用Isotope)。在模板完成渲染後執行某些操作
理想情況下,我想獲得關於如何獲得同位素工作一定支撐 - 顯示項目和點擊鏈接進行排序和過濾,以及一些普通淘汰賽幫助。我是KO新手,我甚至不確定自己在做什麼是最佳做法。
下面是相關的代碼(我不知道關於得到的jsfiddle與外部模板上運行 - 如果你有什麼祕訣,我爲得到一個例子去!):
如果我將「afterAdd」更改爲「afterRender」,同位素和它的過濾機制將起作用 - 但它只渲染一個項目 - 而不是整個對象。
HTML
<div data-bind="template: { name: 'itemList', foreach: sampleItems, afterAdd: renderIsotope }"></div>
外部模板
<div data-bind='attr: { "class": "item " + type }'>
<div class="item-details">
<span class="type" data-bind="text: type"></span>
<span class="size" data-bind="text: size"></span>
<span class="name" data-bind="text: name"></span>
<!-- ko if: type === 'folder' -->
<a href="#" class="changeFolderColor">Change Folder Color</a>
<span class="folderColor" style="display: none" data-bind="text: backgroundColor"></span>
<!-- /ko -->
</div>
<!-- ko if: type !== 'folder' -->
<img data-bind="attr: { src: preview }" />
<!-- /ko -->
型號
var sampleItems = [
{
type: "image",
size: "2482",
name: "Robert",
preview: "/images/placeholders/178x178-1.jpg",
backgroundColor: "",
id: "1"
}, ....
視圖模型
var itemsModel = function (items) {
var self = this;
self.items = ko.observableArray(ko.utils.arrayMap(items, function (item) {
return { type: item.type, size: item.size, name: item.name, preview: item.preview, backgroundColor: item.backgroundColor, id: item.id };
}));
}
嘗試 「afterAdd」 功能
var renderIsotope = function (elements) {
// initialize isotope
$(".content .right").isotope({
itemSelector: ".item",
getSortData: {
type: function ($elem) {
return $elem.find(".type").text();
},
size: function ($elem) {
return parseFloat($elem.find(".size").text());
},
name: function ($elem) {
return $elem.find(".name").text();
}
}
});
// filter items when filter link is clicked
$('.item-filter a').click(function() {
var selector = $(this).attr('data-filter');
$(".content .right").isotope({ filter: selector });
return false;
});
// sort items when sort link is clicked
$('.item-sort a').click(function() {
// get href attribute, minus the '#'
var sortName = $(this).attr('href').slice(1);
$(".content .right").isotope({ sortBy: sortName });
return false;
});
}
感謝。我的示例代碼有afterAdd,但我也試過afterRender。另外,關於沒有使用同位素,我不認爲這是一個特定的插件的情況。它通常運行一個函數。 – motoxer4533 2013-04-09 15:13:14