11

私は現在ASP.NETMVCソリューションに取り組んでおり、最近Knockout(MVVM JSライブラリ)とWijmo(jQuery UIウィジェットのセット)の両方を導入しました。

Knockoutの導入に伴い、クライアント側にもモデルが必要になるため、この目的のために、C#ViewModelをシリアル化し、を使用してビューにアタッチしdata-model="@Model.ToJson()"ます。これにより、JSからモデルを取得し、クライアント側の愛をすべてに適用することができます。

ただし、ノックアウトではすべてを監視可能にする必要があるため、別のクライアント側のViewModelを宣言し、データモデルオブジェクトからすべてをマップする必要があります。これは重複した努力のように感じます、そして私はそれをどうにかして避けたいです。

誰かが共有するツールまたはテクニックを持っていて、サーバーから直接ノックアウトViewModelをレンダリングできるようになることを望んでいます。考えられる解決策は次のとおりです。

  • 監視可能なビューモデルをdata-model属性の出力に直接レンダリングするカスタムJSONシリアル化。
  • クライアント側の自動変換(ko-autobindについて聞いたことがありますが、それが推奨されるパスであるかどうか、またはそれがどれほど安定しているか/完全であるかはわかりません)
  • 私が考えていなかった何か

観察可能なクライアント側のビューモデルを手動で入力するという現在のアプローチは非生産的すぎて実行できないため、ソリューションを一般的かつ自動化する必要があります。

この問題をどのように解決していますか?

4

2 に答える 2

10

彼らのチュートリアルによると、それは単純な.map機能です

これがViewModelの場合

function Task(data) {
    this.title = ko.observable(data.title);
    this.isDone = ko.observable(data.isDone);
}

この関数はサーバーからデータを取得し、この関数を使用し.mapてサーバー データを VM に直接挿入します。

// Data
var self = this;
self.tasks = ko.observableArray([]);

// Load initial state from server, convert it to Task instances, then populate self.tasks
$.getJSON("/tasks", function(allData) {
    var mappedTasks = $.map(allData, function(item) {
        return new Task(item)
    });
    self.tasks(mappedTasks);
});

ko マッピングの場合 http://knockoutjs.com/documentation/plugins-mapping.html

自動バインドの例を次に示します

https://groups.google.com/forum/#!msg/knockoutjs/IJTx37UXQVw/UTrWdEK1C-oJ

于 2012-06-02T22:11:33.953 に答える