作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我相关 fiddle 的链接:http://jsfiddle.net/mwassmer/Kwmn5/
我试图让用户将一行或多行从第一个表(可用数据库字段)移动到第二个表(要保存到用户的自定义“数据集”的字段),反之亦然。
当“addSelected”事件处理程序运行时,除非检查最后一行且仅检查最后一行,否则我收到“无法读取未定义的属性'isChecked'”错误。我仍在努力思考在 knockout 中如何正确使用“this”,所以我认为问题与我对“this”的误用有关。任何帮助将不胜感激。
相关代码摘录如下:
self.addSelected = function() {
ko.utils.arrayForEach(self.dbRows(), function(row)
{
if (row.isChecked) {
row.isChecked = false;
self.dsRows.push(row);
self.dbRows.remove(row);
}
});
};
最佳答案
问题是您正在删除正在迭代的数组中的一个元素。
ko.utils.arrayForEach的来源是:
var arrayForEach = function (array, action) {
for (var i = 0, j = array.length; i < j; i++)
action(array[i]);
}
解决此问题的一种方法是在删除元素之前创建数组的副本。您可以通过以下方式做到这一点:
array.slice(0)
在您的代码中:
self.addSelected = function() {
ko.utils.arrayForEach(self.dbRows().slice(0), function(row)
{
if (row.isChecked) {
row.isChecked = false;
self.dsRows.push(row);
self.dbRows.remove(row);
}
});
};
更新后的 fiddle 是 here 。
关于knockout.js - "Cannot read property '×' of undefined",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14550912/
我是一名优秀的程序员,十分优秀!