我使用的是knockout.js 2.3.0,我有一个表,其中包含动态添加的行和每个行中的选择列表。更改日期输入后,选择列表将填充不同的内容。由于不同的日期会使用不同的内容填充列表,因此我想删除之前添加的所有行,因为内容可能不准确。
我遇到的问题是并非所有行都被删除。例如:如果我有超过4行,则总会有2行。清除所有行的唯一时间是只有一行开始。
这是删除行的订阅功能
self.date.subscribe(function() {
//I also tried setting the loop length to a very long number but the same results happened each time
for (i = 0; i < self.customers().length; i++){
self.customers.remove(self.customers()[i]);
}
//now populate the select list and add an empty row - commented out for testing to make sure rows are being deleted
//setCustomerList(self.date());
//self.customers.push(new AddCustomer(self.customerList[0]));
});
我只是在测试看看会发生什么,而且我要删除所有行的唯一方法是添加多个for循环,这显然是不可取的。
是否有更简单的方法可以删除所有动态添加的行?
答案 0 :(得分:2)
如果要删除可观察数组中的所有项,请使用removeAll
方法:
self.customers.removeAll();
如果你真的想要使用一个循环,你可以通过不断删除最后一个(或第一个)项目来实现,直到没有剩下:
while (self.customers().length) {
self.customers.pop();
}
答案 1 :(得分:1)
我认为您需要反转for循环并从下往上删除项目。你的代码的问题在于,每次删除一个项目时,数组的长度都会发生变化。
self.date.subscribe(function() {
var customerLength = self.customers().length
for (i = customerLength ; i >= 0; i = i - 1){
self.customers.remove(self.customers()[i]);
}
});