当我尝试将新项目添加到数组中时,我似乎无法让 Knockout 映射插件执行(项目的)“创建”方法。 它似乎在从 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;
};
最佳答案
映射插件的目标(顾名思义)是在对象图之间进行映射,而不是创建用于拉伸(stretch)的新对象。因此它不提供任何可以在此用例中为您提供帮助的功能...
但是您的 Items
创建函数已经处理空项目情况,因此您可以在 addItem
方法中直接调用此函数:
model.addItem = function() {
model.Items.push(mappingOptions.Items.create({}));
};
演示 JSFIddle .
关于jquery - 如何使用 knockout 映射插件添加新的匿名项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19230324/