我有一个问题可以说明我的问题:http://plnkr.co/edit/PzBrcTX0Vnn01xWy4dk6
这是一个包含“设置”列表的表。它使用 Footable,以便可以对列表进行排序以及 Footable 的其他功能。
场景1:运行,按下一行或多行的删除设置按钮。请注意,按下按钮后该行将被删除。这是预期的行为。
场景2:运行,单击设置列标题并确保该列已排序,按下删除按钮。请注意,该行并未从视图中删除。
如果您在 Application Settings.js 中放置断点:
var removeItem = function (item) {
items.remove(item);
};
您可以看到,在这两种场景中,可观察数组都按预期删除了项目,但在场景 2 中,视图未按预期更新。
问题来自于每个节点周围的空文本节点<tr>
元素。这foreach
绑定还跟踪这些文本节点。看https://github.com/knockout/knockout/pull/709讨论为什么不能将它们作为一般规则忽略。另一方面,您的自定义绑定可以将它们删除。
See how 可淘汰排序这样做(出于类似的原因):
var nodes = Array.prototype.slice.call(element.childNodes, 0);
ko.utils.arrayForEach(nodes, function(node) {
if (node && node.nodeType !== 1) {
node.parentNode.removeChild(node);
}
});
您需要确保它之前运行过foreach
。我修改了你的绑定来做到这一点:http://plnkr.co/edit/hS6Gb2xLfabSj9K8l03y?p=preview
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)