【问题标题】:Knockjs mapped array not attached to parent objectKnockjs 映射数组未附加到父对象
【发布时间】:2012-11-02 17:09:10
【问题描述】:

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

对象类似于购物车编辑器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”

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

【问题讨论】:

  • 将您的视图模型和 html 添加到小提琴中。
  • 当您不发布删除功能时,我们应该如何告诉您您的删除功能有什么问题?
  • 对不起,我更正了 jsFiddle 链接

标签: knockout.js knockout-mapping-plugin knockout-2.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 exampleremoveLine 方法中也使用了这种技术

var self = this;
self.removeLine = function(line) { self.lines.remove(line) };

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-24
    • 2021-11-24
    • 1970-01-01
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多