我使用knockoutjs.mapping来映射现有对象返回服务器是JSON。
该对象类似于购物车编辑器example,项目的主要区别已经存在。
这是我的尝试http://jsfiddle.net/9ej3r/
映射是直截了当的:
var mapping = {
'Items': {
create: function(options) {
return new InvoiceItem(options.data);
},
key: function(data){
return ko.utils.unwrapObservable(data.ID);
}
}
};
当我点击删除时,我收到错误:“this.Items in undefined”
我在这里做错了什么?如何调整购物车编辑器示例以使用现有行?
答案 0 :(得分:1)
你被this
在javascript中的工作方式所困扰。
因为当您removeItem
方法被调用时,this
将是实际项目,例如InvoiceItem
而不是Invoice
,因此您需要捕获变量中的“其他”this
,并在函数中使用该变量来访问Invoice
。
所以你的removeItem
应该是这样的:
var self = this;
this.removeItem = function (item) {
self.Items.remove(item);
}
另见Demo。
您应该注意cart editor example也在removeLine
方法
var self = this;
self.removeLine = function(line) { self.lines.remove(line) };