3

我想通过 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
    }
});

那么创建可在视图中调用的自定义主干事件的方法是什么?

4

2 回答 2

3

创建可在视图中调用的自定义主干事件的方法是什么? 我感觉好像你的问题不是问题,因为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

最关键的一句话是:</p>

this.$el.delegate(selector, eventName, method);

因为backbone的事件是jquery的delegate(http://api.jquery.com/delegate/),所以jQuery的delegate支持事件,backbone是可用的。

于 2012-07-11T15:22:35.233 回答
2

我不确定我是否理解问题所在。您的第二个示例绝对是我将如何在主干视图中设置事件处理程序的方式。Backbone 的 validate 方法只存在于模型中,在模型 set 和 save 被调用之前自动调用。默认情况下未定义。如果您在视图中进行验证,尽管您的方式应该可行。但我相信事件处理函数只传递事件。所以应该是

validate: function (event) {
   // do Something here
}

您还应该记住,主干事件委托发生在 el.xml 中。所以您需要手动设置它或渲染它,以便事件委托工作

于 2012-07-11T15:28:06.233 回答