3

私のWebサーバーは、構造化されたマークアップを含むページを返します。マークアップ表現をJSONオブジェクト(ノックアウトビューモデルオブジェクト)として手元に置くには、knockoutJSを使用する必要があります。

ページには基本的に(最初のロードの直後に)<div data-bind="foreach: ExistingNamings">ビューモデルオブジェクトのExistingNamings配列に入るはずのものを実際に保持するいくつかの囲まれたdivを持つaがあります。

呼び出し時に提供されたマークアップに基づいて、「解析」および既存のマークアップをノックアウトし、ビューモデルにデータを入力できko.applyBindingsますか?

KNJSのチュートリアルでは、その逆を示しています。JSにはデータ生成コードがあり、applyBindingsの呼び出し時にHTMLにプッシュされます。

PS私のサーバー側はASP.NETMVCであり、http://knockoutmvc.com/(jsファイルの初期化コードを生成するアプローチ)を提案している人を見かけまし。このようにして、「あたかも」ビューモデルがjavascriptを介して初期化されます。これが初期データを処理する唯一の方法ですか、それとも実際にマークアップを解析できますか?

4

1 に答える 1

3

次のようなかみそりを使用して、C#モデルをJSONに直接シリアル化できます。

var serverModel = @Html.Raw(Json.Encode(Model));

または、明らかに:

var serverProperty = @Html.Raw(Json.Encode(Model.Property));

これが失敗するのは、循環参照がある場合のみです。これは、エンティティモデルを直接ドロップする場合に発生する可能性があります。これを行う場合は、循環ナビゲーションプロパティを削除するために、それらのViewModelを作成します。

アップデート:

これをviewModelに取り込むには、これをRazorビューの下部に追加します。

<script type="text/javascript">
    var serverModel = @Html.Raw(Json.Encode(Model));    
    //Define KO viewModel, either here, or by including via script tag in header    
    ko.applyBinding(new ViewModel(serverModel));
</script>
于 2012-07-17T15:54:43.873 に答える