List<Item>
并将其反序列化为JSON:
"Item":[{"p1":1,"p2":2,....},{"p1":1,,"p2":2,....}]
我为item对象添加了一些自定义可计算函数:
var Moptions = {
'Item': {
create: function (options) {
return (new (function () {
this.calcDateAuto = ko.computed(function () {
return something;
},this);
ko.mapping.fromJS(options.data, {}, this);
我能够从Knockout对象解析数据和自定义计算函数:
var viewmodel = ko.mapping.fromJS(JSON,Moptions);
我想要做的是允许用户将新项目(客户端)添加到我的挖空视图模型中。我一直试图使用正确的对象(请注意我希望用对象计算函数)
viewmodel.addItem = function () {
viewmodel.Item.push( /* what should I use here */)
}
我找到了这篇文章https://stackoverflow.com/questions/18150539/adding-a-new-object-to-observable-array-in-knockout-mvc][1]。但是我的情况有点不同,因为我有计算函数。
修改 解决方法可以为Item创建一个空对象。有没有办法做到这一点?我试图这样做(没有工作):
var temp = ko.toJSON(viewmodel.Item);
var newmodel = ko.mapping.fromJS(temp);
答案 0 :(得分:0)
目前物品的结构是什么?只要你确保值的格式相同,那么你应该好好去。请确保&#39;项目&#39;不仅仅是一个数组,而是一个observableArray ...否则你将改变你的对象但是没有在你的UI中看到它。
答案 1 :(得分:0)
因此在SO上有类似的情况,但不幸的是在我的情况下,我在映射过程中手动将一些计算函数添加到我的Item对象中。
我最后在Add Item功能中执行此操作:
viewmodel.addItem = function () {
var options = {
create: function (options) {
return (new (function () {
this.calcDateAuto = ko.computed(function () {
return something;
},this);
ko.mapping.fromJS(options.data, {}, this);
};
var item = serverModel.Item()[0];
var newItem = ko.mapping.fromJS(ko.mapping.toJS(item),options);
serverModel.Item.push(newItem);
}
这基本上做的是在可观察数组中获取一个现有Item对象,将其反序列化为JSON并使用knockout映射插件将其转换回对象。但关键是映射选项。这类似于&#34; Moptions&#34;除了它没有寻找&#34;项目&#34;对象