here에 대한 제안과 forEach에 대한 custom bindingHandler를 만드는 방법에 대해 here에 제공된 정보에 따라 필자는 사용자 정의 바인딩을 작성하려고 시도했습니다. forEach와 Masonry.벽돌을위한 사용자 정의 바인딩 사용 방법
요소가 즉석에서 추가되므로 공간을 채우기 위해 요소를 다시 그리거나 이동하는 일이 발생하지 않습니다. 따라서 각 항목을 추가 한 후에 요소를 렌더링하거나 호출 한 후에이 기능을 이동해야했습니다.
은 여기 내 bindingHandler
ko.bindingHandlers.masonry = {
init: function (element, valueAccessor, allBindingsAccessor) {
var $element = $(element),
originalContent = $element.html();
$element.data("original-content", originalContent);
//var msnry = new Masonry($element);
return { controlsDescendantBindings: true }
},
update: function (element, valueAccessor, allBindingsAccessor) {
var value = ko.utils.unwrapObservable(valueAccessor()),
//get the list of items
items = value.items(),
//get a jQuery reference to the element
$element = $(element),
//get the current content of the element
elementContent = $element.data("original-content");
$element.html("");
var container = $element[0];
var msnry = new Masonry(container);
for (var index = 0; index < items.length; index++) {
(function() {
//get the list of items
var item = ko.utils.unwrapObservable(items[index]),
$childElement = $(elementContent);
ko.applyBindings(item, $childElement[0]);
//add the child to the parent
$element.append($childElement);
msnry.appended($childElement[0]);
})();
msnry.layout();
msnry.bindResize();
}
}
};
및 핸들러를 구현하는 HTML이다. 이것은 페이지에 표시되면
<div id="criteriaContainer" data-bind="masonry: { items: SearchItems.Items }">
<div class="searchCriterion control-group">
<label class="control-label" data-bind="text: Description"></label>
<div class="controls">
<input type="hidden" data-bind="value: Value, select2: { minimumInputLength: 3, queryUri: SearchUri(), placeholder: Placeholder(), allowClear: true }" style="width: 450px">
</div>
<p data-bind="text: Value"></p>
</div>
</div>
그것은 요소가 서로의 바로 위에 추가]의 방법을 통해 렌더링 모든 경우 스택.
당신은 내 bindingHandler에서 bindResize와 layout()을 호출하고 있는데 어느 것도 어떤 영향을 미치고있는 것 같지 않다.
다음은 UI에서 보이는 모양의 스크린 샷입니다. https://github.com/aknuds1/knockout-isotope/blob/master/lib/knockout-isotope.js
참고 :