当我尝试将新Item添加到我的数组中时,我似乎无法获取Knockout Mapping Plugin来执行“items”方法(Items)。 它似乎是在json的初始创建时执行,而不是在添加新项目时执行。
这是一个非常简化的jsFiddle
注意:我查看了similar questions,但它们都引用了我没有的静态对象。
初始JSON
var json = {
"Items": [{
"ItemID": 1,
"ItemDate": "2000-01-02T00:00:00Z",
"Amount": 50
},{
"ItemID": 2,
"ItemDate": "2000-01-02T00:00:00Z",
"Amount": 100
}]
};
映射选项
var mappingOptions = {
"Items": {
create: function (mappingoptions) {
var data = mappingoptions.data;
data = data || {
"ItemID": ko.observable(0),
"ItemDate": ko.observable(currentDate),
"Amount": ko.observable(new Date())
};
var result = ko.mapping.fromJS(data);
return result;
}
}
};
查看模型(使用添加方法)
MyApp.Batch.ViewModel = function (jsonBatch) {
//Works Great
var model = ko.mapping.fromJS(jsonBatch, mappingOptions);
//Doesn't Work
model.addItem = function() {
// TRYING TO ADD a new Empty Item USING THE AUTO MAPPER
var newItem;
model.Items.push(ko.mapping.fromJS(newItem, mappingOptions))
};
return model;
};
答案 0 :(得分:2)
映射插件的目标(顾名思义)是在对象图之间映射而不是为拉伸创建新对象。所以它没有提供任何可以帮助你在这个用例中的功能...
但是,您的Items
创建功能已处理空项目案例,因此您可以使用addItem
方法直接调用此函数:
model.addItem = function() {
model.Items.push(mappingOptions.Items.create({}));
};
演示JSFIddle。