具有某些名称的Backbone.js事件处理程序会导致嵌套视图出错

时间:2013-05-28 20:34:43

标签: javascript backbone.js

我有一个HTML表单和提交按钮的以下嵌套Backbone视图:

var Button = Backbone.View.extend({
    enable: function() {
        this.$el.prop('disabled', false);
        return this;
    },
    disable: function() {
        this.$el.prop('disabled', true);
    }
};

var Form = Backbone.View.extend({
    el: '#login-form',
    events: {
        'submit': 'submit'
    },
    initialize: function() {
        this.submitBtn = new Button({el: this.$el.find(':submit')});
    }
    submit: function(e) {
        this.submitBtn.disable();
        // Do AJAX request and re-enable submit upon completion
        // ...
        return e.preventDefault();
    }
};

问题是,当我点击提交按钮时,我收到以下错误:

TypeError: 'undefined' is not a function (evaluating 'n.apply(t,r.concat(o.call(arguments)))')

Form实例的提交函数永远不会被调用。

1 个答案:

答案 0 :(得分:0)

在我的桌子上撞了一下之后,我设法通过重命名处理函数来解决问题:

var Form = Backbone.View.extend({
    // ...
    events: {
        'submit': 'submitHandler'
    },
    // ...
    submitHandler: function(e) { /* ... */ }
};
然而,有两个奇怪的事情。 (1)如果我删除嵌套的Button视图,名为submit的处理程序按预期工作,(2)使用Button视图,将Form视图的提交事件处理程序重命名为submit以外的其他内容会工作的。

那是怎么回事?调用处理函数submit是否有什么神奇之处?