2012-02-02 7 views
1

ユーザーがログインすると、サーバーからデータが読み込まれます。 observableArray()への追加のたびに従属オブザーバブルが更新されているように見えるので、これには多くの時間がかかります。すべてのデータがロードされるまで、すべての依存関係の評価を延期したいと思います。私はdeferEvaluation: trueが特定のko.computed()変数の振る舞いにどのように影響するかを見てきましたが、更新が完了し、ビューを再描画するためにモデル全体を無効にするまで、observableを分離したいと思います。knockoutjsを使用してデータを読み込むときの依存関係を延期する

問題を説明するためにjsfiddleを作成しました。実際のコードでは、オブジェクトをロードするためにマッピングプラグインを使用していますが、ここではすべての状態変更で呼び出される.subscribe関数を使用してすべての依存関係をシミュレートします。私は最後まで呼び出されないようにしたいと思います。

答えて

4

通常、このような状況では、observableArrayから基になる配列にアクセスし、それを押します。次に、最後のものをobservableArrayにプッシュするか、myObservableArray.valueHasMutated()を呼び出します。

ので、一般的に、それは次のようになります。あなたのフィドルで

var underlyingArray = this.items(); 
underlyingArray.push(one); 
underlyingArray.push(two); 
underlyingArray.push(three); 
this.items.valueHasMutated(); 

、あなたはthis.document().history().push(this);を行うことができます。次に、サブスクリプションの実行を希望する場合は、影響を受けるドキュメントでvalueHasMutated()を呼び出して戻ります。

+1

この解決策の1つの問題は、 'ko.mapping'プラグインでうまく動作しないことです。呼び出しが完了する前に、更新が 'ko.mapping.fromJS'呼び出しの中からディスプレイに伝わるのを見ています。 –

関連する問題