2012-03-15 20 views
42

ビューモデルにobservableArrayがあります。 vmを作成した後、データを完全に置き換えたいと思っています。observableArray。ここで私はそれをやっている方法は次のとおりです。Knockout.js observableArrayのすべての要素を置き換えます。

//Initial Setup 
var vm = {}; 
vm.roles = ko.observableArray([]); 
ko.applyBindings(vm); 


//....replace array later on.... 
vm.roles(["1", "2"]); 

これは正常に動作しているようだが、私はこれが間違っていた場合は心配していたとメモリリークにつながる可能性があります。すべてのデータを置き換えることを前提に、既存のobservableArrayを更新するのが望ましい方法であれば、誰でも準拠することができますか?

私は気づきましたはremoveAll()メソッドを持っていますか、これをきれいに行うために呼び出される必要があるかどうか、私がやっていることでうまくいけばいいですか?

答えて

38

observableArrayのデータを完全に置き換えるには、使用している手法をお勧めします。 observableArrayは、実際にはただの普通の配列observableであり、基本的な配列とトリガー通知に作用する便利な配列操作のために特別な機能が追加されています。

+3

をオブジェクトを再作成いた。あなたは、のドキュメント/リンクをサポートしていることが起こるだろうあなたの声明?もちろん、あなたはMr. Knockmeout自身です(O;) – Kristopher

-4

IE9以下では、推奨される方法が機能しないことが判明しました。代わりに、私はあなたがhttp://skeptics.stackexchange.com/キック上の質問に答えるからの私の訓練を「推奨されるアプローチを」と言うとき、

vm.roles = ko.observableArray(["1","2"]) 
+0

新しいバージョンのKnockoutで変更されているのでしょうか...使用していたバージョンは –

+14

オブジェクト全体を置き換えると、オブザーバは通知されません。 –