0

http://jsfiddle.net/herrturtur/ExWFH/

试试这个:

  1. 点击加号按钮,
  2. 双击新创建的名称字段,
  3. 为字段填写一些内容
  4. 按 Enter。

时代字段(从和直到)正确显示,但没有保存(重新加载以查看效果)并且名称字段根本没有更新。

this.model.save()在第 153 行对 NameView 的关闭函数(由 Enter-keypress 触发)中的属性进行 set() 处理后调用。

close: function(e){ 
    this.$el.removeClass('editing');
    this.model.set({
        value: this.$('.name-value').val(), 
        from: this.model.from, // this is saved in the 
        until: this.model.until
    });

    this.model.save();

    if(this.eraView.$el.attr('editing')){
        this.eraView.close();
    }
    this.render();
},

有人可以告诉我我做错了什么吗?

最重要的是,我得到一个 TypeError: Illegal Invocation in Chrome。

4

2 回答 2

1

您遇到的问题是调用该close函数时。

在您的close函数中,您正在调用自身,因此它看起来像是一个冗余循环。

JS斌

在您的 上karass.EraView,您还会在不必要的函数中触发相同的函数。我建议将其重命名为与操作意图相对应的不同函数。

this.trigger('close');
于 2013-02-03T18:45:29.527 回答
0

由于以下原因,您会收到该错误: this.eraView.on('close', close);

它应该是: this.eraView.on('close', this.close, this);

接下来,当你这样做时:

this.model.set({
            value: this.$('.name-value').val(), 
            from: this.model.from, 
            until: this.model.until
        });

this.model.from并且this.model.until是未定义的,而且您之前已经设置了这些属性。该模型已经拥有它们。如果你想访问它们,你需要做this.model.get('from')而不是this.model.from. 但是从模型中获取值并再次设置它是不必要的。你可以只set值,因为其他 2 已经在那里。

另一个问题类似。渲染 NameView 时,您正在执行以下操作:

this.$el.html(this.template({value: this.model.value}));

和以前一样,你需要做this.model.get('value')

您应该尝试在 Chrome 中设置一些断点并逐步执行代码。很容易通过它,看看出了什么问题:)

更新了 jsFiddle

于 2013-02-03T19:01:35.400 回答