2

asp.net mvc 2 プロジェクトでノックアウトを使い始めました

とにかく簡単なことをやってみた。私は次のようなモデルを作成しました:

var userViewModel = {
ID: ko.observable(),
assignedGroups: ko.observableArray(),
avilableGroups: ko.observableArray(),
permissions: ko.observableArray()
};

次に、jquery の document.ready で次のように呼び出しました。

ko.applyBindings(userViewModel);

私が持っているaspx自体に:

<select multiple id="groupOfUser" class="multi_added_groups" data-bind="foreach:    assignedGroups">
  <option data-bind="text: $data, value: $data"></option>
</select> 
<span data-bind="text: ID"></span>

最初にデータを userViewModel に入れると、ビューは期待どおりに表示されます。それは素晴らしいことですが、最初はビューを空から始めたいと思っています。ユーザーがユーザーを選択した後、私は ajax リクエストを作成します。私の応答は次のとおりです。

{"ID":691,
"assignedGroups":["group1","group2"],
"avilableGroups":["role.administrator","role.editor"],
"permissions":[{"name":"admin","level":"ReadWrite"},
{"name":"admin.errorInfo","level":"Read"}]
 }

次に、コールバック関数で:

ko.mapping.fromJS(res, userViewModel);

それだけだと思います。ビューがサーバーからの新しいデータで更新されません...何が間違っていますか?

ありがとう!

4

1 に答える 1

4

私はこの問題に何度か遭遇しました。マッピングプラグインは、オブジェクトが最初にマッピングされたデータから作成されていることを想定しているようです。これはプラグインの少しの制限ですが、簡単に回避できます。これは、更新が正しく機能するプラグインを使用してプロパティを作成する例です。

http://jsfiddle.net/madcapnmckay/8BVMZ/1/

var userViewModel = function () {
    var self = this;
    ko.mapping.fromJS({
        ID: "",
        assignedGroups: [],
        avilableGroups: [],
        permissions: []            
    }, {}, self);

    userSelected = function () {
        ko.mapping.fromJS(ajaxResponse, {}, self);
        console.log(JSON.stringify(ko.toJS(self)));
    }
};

お役に立てれば。

于 2012-05-24T15:49:11.457 に答える