Knockout.js 淘汰-从ViewModel中删除项目不会';不能从DOM中删除
我有一个视图模型,其中包含一组对象“文件” 显然,这是绑定到DOM的 当我从“文件”集合中删除一个项目时,我希望DOM会更新以反映这一点,但它不会更新 这是我用来从“文件”集合中删除项目的JSKnockout.js 淘汰-从ViewModel中删除项目不会';不能从DOM中删除,knockout.js,Knockout.js,我有一个视图模型,其中包含一组对象“文件” 显然,这是绑定到DOM的 当我从“文件”集合中删除一个项目时,我希望DOM会更新以反映这一点,但它不会更新 这是我用来从“文件”集合中删除项目的JS this.Delete = function(id) { for (var f = 0; f < this.Files.length; f++) { if (this.Files[f].ID() == id) { this.Files.splice(f
this.Delete = function(id) {
for (var f = 0; f < this.Files.length; f++) {
if (this.Files[f].ID() == id) {
this.Files.splice(f, 1);
}
}
}.bind(this);
然后将Files()的每个实例都更改为文件。没有区别。您需要有可观察阵列:
self.Files = ko.observableArray([]);
但是您需要使用this.Files.splice直接在可观察数组上调用splice
:
this.Delete = function(id) {
// find which index the specified ID exists at
for (var f = 0; f < this.Files().length; f++) {
if (this.Files()[f].ID() == id) {
this.Files.splice(f, 1);
}
}
}.bind(this);
文件如何定义?它应该是一个可观察的array
,否则它可能会工作。。。你说过你已经尝试了observableArray
你能发布你的Delete
函数的版本吗?天啊,这么简单,但我可能已经花了几个小时试图弄明白这一点。非常感谢,@nemesv。对this.Files.remove的一个小修改是item.ID()应该是item.ID(没有括号)。再次感谢。您的示例中有.ID()
。。。我刚刚复制并假设您的ID
属性是一个ko。可观察的
是的,这是真的,我确实错误地拥有ID()。
self.Files = ko.observableArray([]);
this.Delete = function(id) {
// find which index the specified ID exists at
for (var f = 0; f < this.Files().length; f++) {
if (this.Files()[f].ID() == id) {
this.Files.splice(f, 1);
}
}
}.bind(this);
this.Delete = function(id) {
this.Files.remove(function(item) { return item.ID() == id; } );
}.bind(this);