【问题标题】:Knockout JS Convert Array of Json object to validated observablesKnockout JS 将 Json 对象数组转换为经过验证的 observables
【发布时间】:2013-05-24 21:40:40
【问题描述】:

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

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

它有一个名为 Items 的数组,其中包含一个 Item,我怎样才能将数组中的所有 Item 对象转换为 validObservables?这可能吗?

我使用表格来选择要编辑的项目。这是我的桌子:

 <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) 时,它告诉我方法未定义。

谢谢!

【问题讨论】:

    标签: jquery knockout.js


    【解决方案1】:

    敲除映射插件允许您在执行映射时提供 map 作为参数。您可以为您的“项目”实体创建地图,并在地图的 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);
    });
    

    More info on the map param of ko.mapping here.

    【讨论】:

      猜你喜欢
      • 2013-08-27
      • 1970-01-01
      • 2018-02-06
      • 2016-03-18
      • 1970-01-01
      • 2020-11-02
      • 2012-05-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多