我想通过keydown验证用户输入。为此,我需要一个keydown事件。 不幸的是,我只找到了自定义模型事件:
initalize: function(){
this.model = new ModelClass();
this.model.bind("keydown", this.validate, this);
}
对于模特活动来说,这种方法肯定没问题,但我不相信这是观看,与ui相关的东西的正确方法......
为了让您更好地解释,我希望使用我的活动:
var SomeView;
SomeView = Backbone.View.extend({
events: {
"keydown input#some-field": "validate" // custom event
, "change input#some-field": "doSomethingElse" // predefined backbone event
},
validate: function(attr){
// validation
}
});
那么创建可在View中调用的自定义Backbone事件的方法是什么?
答案 0 :(得分:3)
创建可在View中调用的自定义Backbone事件的方法是什么? 我觉得好像你的问题不是问题,因为backbone.view默认一直支持这些事件。 你可以像你想要的那样编写代码:
//This is the right thing to do
SomeView = Backbone.View.extend({
events: {
"keydown input#some-field": "validate" // custom event
, "change input#some-field": "doSomethingElse" // predefined backbone event
},
validate: function(attr){
// validation
}
});
此处参考: http://backbonejs.org/docs/todos.html#section-22
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~
编辑: 你可以在这里看到: http://backbonejs.org/docs/backbone.html#section-156
最关键的一句是:
this.$el.delegate(selector, eventName, method);
因为backbone的事件是jquery的委托(http://api.jquery.com/delegate/),所以jQuery的委托支持事件,骨干是可用的。
答案 1 :(得分:2)
我不确定我是否理解问题所在。你的第二个例子肯定是我在Backbone Views中设置事件处理程序的方式。 Backbone的验证方法仅存在于模型中,并在调用模型集和保存之前自动调用。它未定义为默认值。如果您在视图中进行验证,但您的方式应该有效。但我相信事件处理功能只能通过事件。所以应该是
validate: function (event) {
// do Something here
}
你还应该记住,骨干事件授权发生在el。所以你需要手动设置它或渲染它,以便事件委托能够工作