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