0

次のようにサーバーからビューモデルを取得すると:

$.getJSON('/Items/', function (data) {
    var mapped = ko.mapping.fromJS(data);
    self.ViewModel(mapped);
});

Item を含む Items という配列があります。配列内のすべての Item オブジェクトを validatedObservables にするにはどうすればよいですか? それは可能ですか?

テーブルを使用して、編集するアイテムを選択します。ここに私のテーブルがあります:

 <tbody data-bind="foreach: ViewModel().Items">
        <tr>
            <td data-bind="text: ItemName"></td>
            <td data-bind="text: ItemCost"></td>
            <td data-bind="text: CategoryName"></td>
            <td><a data-bind="click: $root.EditItemPopup">Edit Item</a></td>
        </tr>
    </tbody>

クリック イベントは、次の関数に関連付けられています。

self.ItemToEdit = ko.validatedObservable(Item);
self.EditItemPopup = function (something) {
    self.ItemToEdit(something);
    self.FindMatchingCategory(something.CategoryID());
    $("#editItemPopup").dialog("open");
};

self.ItemToEdit().ItemName.isModified(false) を呼び出すと、メソッドが未定義であることがわかります。

ありがとう!

4

1 に答える 1

0

ノックアウト マッピング プラグインを使用すると、マッピングを実行するときにマップをパラメータとして指定できます。「アイテム」エンティティのマップを作成し、マップのcreate関数でvalidatedObservableエクステンダーを適用できます。あなたの例では、配列を次のko.mapping.fromJSように送信しています。

var itemMap = {
    create: function (options) {
        var koItem = ko.mapping.fromJS(options.data);//regular mapping
        var koItemValidated = ko.validatedObservable(koItem);//turn it into validatedObservable
        return koItemValidated;//return the validatedObservable
      }
};

$.getJSON('/Items/', function (data) {
    var itemsObj = {items:data};//create an object with a property of "items"
    var mapped = ko.mapping.fromJS(data, {'items':itemMap});//for each item in items, use itemMap
    self.ViewModel(mapped);
});

ko.mapping のマップ パラメータの詳細については、こちらを参照してください。

于 2013-05-25T00:10:11.067 に答える