如果我从服务器检索我的视图模型,如下所示:
$.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)时,它告诉我方法未定义。
谢谢!
答案 0 :(得分: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);
});