Knockout.js 淘汰-从ViewModel中删除项目不会';不能从DOM中删除

Knockout.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

我有一个视图模型,其中包含一组对象“文件”

显然,这是绑定到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, 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);