HTMLKnockout.js applyBindings兩次重複結果
<table cellpadding="0" cellspacing="0" border="0">
<thead>
<tr><th width="483"><span>Product Name</span></th></tr>
</thead>
<tbody data-bind='foreach: basket.model.products()'>
<tr><td><div class="ml10 productDetails" data-bind="text: name"></div></td></tr>
</tbody>
</table>
JavaScript代碼
var ProductLine = function(data) {
var self = this;
self.name = ko.observable(data.name);
};
function BasketModel(data) {
var self = this;
self.initialData = ko.observable(data);
self.products = ko.observableArray();
$.each(self.initialData().products,function(i,val){
self.products.push(new ProductLine(this));
});
}
function renderBasket(data){
basket = { model: new BasketModel(data)};
ko.applyBindings(basket.model);
}
$(document).ready(function(){
var sampleData = [{"name":"product 1"},{"name":"product 2"}];
renderBasket(sampleData);
});
在i AJAX交內增加一個新的產品籃,我調用下面的功能與響應數據
renderBasket(response.data);
示例響應數據如 [{「name」:「product 1」},{「name」:「product 2」},{ 「name」:「product 3」}];
起初: 錶行是這樣的:
product 1
product 2
product 3
後,我添加一個新的產品 結果是:
product 1
product 1
product 1
product 2
product 2
product 2
product 3
product 3
product 3
我試過ko.cleanNode和basket.model.products .removeAll()在ko.applyBindings(basket.model)之前; 但我解決不了。
謝謝。
當我在「ajax發佈成功」上做了這件事,它工作。但我認爲這不應該是真正的解決方案。 basket.model.products.removeAll(); \t \t \t \t \t \t \t \t \t \t \t \t $。每個(ajaxCevap.data.products,功能(I,VAL){ \t \t \t \t \t \t \t basket.model.products.push(新PRODUCTLINE(這個)); \t \t \t \t \t \t}); – 2013-03-20 23:24:25
你永遠不應該調用'applyBindings'兩次,除非你知道自己在做什麼(幾乎所有的標準用例都不需要),否則不應該調用'cleanNode'。這個問題每個月至少要問一次。請通過[Knockout教程](http://learn.knockoutjs.com/) – Tyrsius 2013-03-20 23:31:38