0

如果服务器是 JSON,我使用 knockoutjs.mapping 来映射现有对象返回。

该对象类似于购物车编辑器示例,项目的主要区别已经存在。

这是我的尝试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”

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

4

1 回答 1

1

您已经被thisjavascript 的工作原理所困扰。

因为当您的removeItem方法被调用时,this将是实际项目,例如InvoiceItem不是,Invoice所以您需要捕获变量中的“其他”this并在您的函数中使用它来访问Invoice.

所以你removeItem应该看起来像这样:

var self = this;

this.removeItem = function (item) { 
   self.Items.remove(item);
}

另请参阅此演示

您应该注意,购物车编辑器示例removeLine在方法中也使用了这种技术

var self = this;
self.removeLine = function(line) { self.lines.remove(line) };
于 2012-11-02T09:09:10.200 回答