我有一个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实例的提交函数永远不会被调用。
答案 0 :(得分:0)
在我的桌子上撞了一下之后,我设法通过重命名处理函数来解决问题:
var Form = Backbone.View.extend({
// ...
events: {
'submit': 'submitHandler'
},
// ...
submitHandler: function(e) { /* ... */ }
};
然而,有两个奇怪的事情。 (1)如果我删除嵌套的Button视图,名为submit
的处理程序按预期工作,(2)使用Button视图,将Form视图的提交事件处理程序重命名为submit
以外的其他内容会工作的。
那是怎么回事?调用处理函数submit
是否有什么神奇之处?