您可以通過自定義綁定做到這一點。
更新:
如果你想開一個div,並從另一個項目結束時,自定義綁定是這樣的:
ko.bindingHandlers.myCustomBinding = {
update: function(element, valueAccessor, allBindings, data, context){
var value = valueAccessor();
var items = ko.utils.unwrapObservable(value);
var currentElement = element;
ko.utils.arrayForEach(items, function(item){
if(item.startContainer){
var container = document.createElement('div');
$(container).append(item.displayContent);
$(container).addClass("container");
currentElement = container;
}
else if(item.endContainer){
$(currentElement).append(item.displayContent);
$(element).append(currentElement);
currentElement = element;
}
else{
$(currentElement).append(item.displayContent);
}
});
}
};
HTML:
<div data-bind='myCustomBinding: items'></div>
有可能是更好的方法來編寫代碼,並可能使用內置的綁定,但這應該足以讓你開始。
http://jsfiddle.net/posthuma/f5wG4/2
所以,我只想澄清,你的名單將開始容器之前進行渲染。在某些時候,元素將開始在容器內呈現。到達列表的另一個位置後,元素將開始在容器之後呈現。是對的嗎?如果這就是目標,你是否已經分別考慮了3個foreach和之前,之內和之後的元素的計算列表? – 2013-05-07 20:31:26
是的,你是對的。 3 foreache's可能是一種選擇,但真實情況要複雜得多,難以改變,我很感興趣,如果淘汰賽模板足夠靈活,可以做到這一點 – Anri 2013-05-07 20:50:42