私はオブジェクトのコレクション「ファイル」を含むビューモデルを持っています。ノックアウト - ViewModelからアイテムを削除してもDOMから削除されない
明らかに、これは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);
私は(ID)を削除呼び出した後、コンソールにコレクションの長さを印刷する場合、私はアイテムが削除されていることがわかります。
なぜDOMは更新されませんか?
私は...それが更新を行いますが、私の理解は、私は毎回ビューモデルの更新これを呼び出す必要はありませんということです(ko.applyBindingsを呼び出した場合。
だから私は何をかもしれません間違っているの
また、私は何の違いなしで、observableArrayと標準配列としてファイルでそれを試してみた
UPDATE:?。をここにビューモデルの定義は(も...関連です一部、とにかく)
function Files(files) {
var self = this;
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);
...
}
は、私はまた、
self.Files = [];
でそれを試してみましたが、その後、ファイルのすべてのインスタンス()へのファイルだけを変更しました。変わりはない。そうでなければ、することなく、基になる配列のフォーム項目を削除
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);
:
self.Files = ko.observableArray([]);
しかし、あなたはthis.Files.splice
で観察アレイ上に直接splice
を呼び出す必要があります:あなたは、観察の配列を持っている必要があり
がどのように 'files'をがdefiniedさ:ところで
はobservableArrayは大幅にコードを簡素化することができ
remove
機能を持っていますか?それは 'observableArray'でなければなりません。そうでなければうまくいきます。' observableArray'で試したことがありますが、 'Delete'関数のそのバージョンを投稿できますか? – nemesv