0

如果我像这样从服务器检索我的视图模型:

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

它有一个名为 Items 的数组,其中包含一个 Item,我怎样才能将数组中的所有 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 回答