backbone.js非法调用

时间:2013-02-03 17:39:07

标签: javascript backbone.js local-storage

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

试试这个:

  1. 点击加号按钮,
  2. 双击新创建的名称字段
  3. 为字段填写内容
  4. 按Enter键。
  5. 时区字段(从和到)可以正常显示,但不会保存(重新加载以查看效果),并且名称字段根本不会更新。

    我在第153行中设置()调用NameView的关闭函数(由Enter-keypress触发)中的属性后调用this.model.save()

    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();
    },
    

    有人能告诉我我做错了吗?

    除了一切,我在Chrome中遇到TypeError:非法调用。

2 个答案:

答案 0 :(得分:1)

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

close函数中,您正在调用自身,因此它似乎是一个冗余循环。

JS Bin

在你的karass.EraView上,你也会在函数中触发相同的功能,这是不必要的。我建议将其重命名为与行动意图相对应的不同功能。

this.trigger('close');

答案 1 :(得分: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.fromthis.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