2013-04-03 33 views
0

當我已經在服務器端進行eached的元素時,我該如何爲每個客戶端提供服務?淘汰賽foreach服務器端

做完兩者後,元素有兩倍。

下面是通過創建一個綁定處理程序來刪除init上的子元素,從而使用老版本的knockout進行修復的方法。任何人都可以得到這與淘汰賽2.1工作?

http://jsfiddle.net/4f9N2/4/

var viewModel = { 
    countries : [ 
     { name: 'UK' }, 
     { name: 'France' }, 
     { name: 'USA' } 
    ] 
} 

ko.bindingHandlers.serverForEach = { 
    init: function(element, valueAccessor, allBindingsAccessor, viewModel) { 
     // clear the list first 
     $(element).children().remove(); 
    }, 
    update: function(element, valueAccessor, allBindingsAccessor, viewModel) { 
     ko.bindingHandlers['template'].update(element, valueAccessor, allBindingsAccessor, viewModel); 
    } 
}; 

ko.applyBindings(viewModel); 
+0

嗯,爲什麼不這樣做在一個地方 - 無論是服務器端或客戶端? – PatrickSteele

+0

我希望服務器端的搜索引擎優化和客戶端的變化。 – Clive

回答

3

template結合包括一個init功能也需要被調用。您也可以簡化如何包裝template處理函數。

ko.bindingHandlers.serverForEach = { 
    init: function(element) { 
     // clear the list first 
     $(element).children().remove(); 
     return ko.bindingHandlers.template.init.apply(this, arguments); 
    }, 
    update: ko.bindingHandlers.template.update 
}; 

例子:http://jsfiddle.net/mbest/4f9N2/12/