0

对于 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 实例的提交函数永远不会被调用。

4

1 回答 1

0

在我的头撞到我的桌子上之后,我设法通过重命名处理函数来解决这个问题:

var Form = Backbone.View.extend({
    // ...
    events: {
        'submit': 'submitHandler'
    },
    // ...
    submitHandler: function(e) { /* ... */ }
};

然而,有两件奇怪的事情。(1) 如果我删除嵌套的 Button 视图,一个名为的处理程序submit将按预期工作,并且 (2) 在 Button 视图就位的情况下,将 Form 视图的提交事件处理程序重命名为submit可以正常工作的其他东西。

发生什么了?调用处理函数有什么神奇之处submit吗?

于 2013-05-28T20:35:45.990 回答