Backbone查看自定义事件

时间:2012-07-11 15:03:11

标签: javascript jquery backbone.js backbone-events backbone-views

我想通过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事件的方法是什么?

2 个答案:

答案 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。所以你需要手动设置它或渲染它,以便事件委托能够工作