gpt4 book ai didi

Knockout.js applyBindings 两次重复结果

转载 作者:行者123 更新时间:2023-12-01 11:45:45 29 4
gpt4 key购买 nike

HTML

<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 );
});

当我在 ajax post 中将新产品添加到购物车时,我使用响应数据调用下面的函数

renderBasket(response.data);

例如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.applyBindings(basket.model); 之前尝试过 ko.cleanNode 和 basket.model.products.removeAll();但我无法解决它。

谢谢。

最佳答案

您应该只调用一次ko.applyBindings(从$(document).ready 函数)。只需将产品推送到 observableArray 上,就可以了。

参见 http://jsfiddle.net/yCBJ8/5/完整示例。

var ProductLine = function (data) {
var self = this;
self.name = ko.observable(data.name);
},
BasketModel = function (data) {
var self = this;

self.products = ko.observableArray();

self.addToBasket = function (d) {
$.each(d, function (i, v) {
self.products.push(new ProductLine(this));
});
};

self.replaceBasket = function (d) {
self.products.removeAll();
self.addToBasket(d);
};

self.addToBasket(data);
};

$(document).ready(function () {
var initialData = [{"name": "product 1"}, {"name": "product 2"}],
basket = {
model: new BasketModel(initialData)
};

ko.applyBindings(basket.model);
});

关于Knockout.js applyBindings 两次重复结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15536409/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com