Knockjs映射的数组未附加到父对象

时间:2012-11-01 14:54:29

标签: knockout.js knockout-mapping-plugin knockout-2.0

我使用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”

我在这里做错了什么?如何调整购物车编辑器示例以使用现有行?

1 个答案:

答案 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) };