4

マッピングプラグインでノックアウトを使用しています。
サーバーが JSON データを返す前にページを初期化する際に問題が発生しました。

シナリオではすべて正常に動作します:
1. JSON を取得
2. 実行VM = ko.mapping.fromJS(result);
3. 実行ko.applyBinding(VM);

ただし、JSON が返されるまでに時間がかかる場合 (たとえば 10 秒)、json が返される前にページを初期化する必要があります。しかし、 JSON を呼び出すよりもko.applyBinding(VM);空の VM ( let say VM = {};) を使用して作成し、再度バインドすると、機能しません。

だから私の質問は - ノックアウトでモデルを再バインドする方法は? 単一のオブザーバブルの値を変更したくはありませんが、データの構造を JSON からマップする必要があるため、VM 全体 (ビュー モデル) を再バインドします。JSON が返される前は不明です。

4

1 に答える 1

4

あなたが説明している問題は、テンプレートで物事がすぐにレンダリングされず(実際にエラーが発生する)、サーバーからのデータが到着したときにそのエラーが再描画を妨げることだと思います。

その場合、私が一般的にこれを処理する方法は、データがいつロードされたかを知るifオブザーバブルを持ち、問題のあるテンプレート コードをこのオブザーバブルに基づいてラップすることです。

更新: VM の値を置き換えている可能性が高くなります。これは、インターフェイス要素にバインドされたオブジェクトではなくなりました。

別の形式のko.mapping.fromJS呼び出しを使用できます。

ko.mapping.fromJS(result, {}, VM);
于 2012-06-11T11:03:27.387 に答える