【问题标题】:Backbone View custom events骨干视图自定义事件
【发布时间】:2012-07-11 15:03:10
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    创建可在视图中调用的自定义主干事件的方法是什么? 我感觉好像你的问题不是问题,因为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的delegate(http://api.jquery.com/delegate/),所以jQuery的delegate支持事件,backbone是可用的。

    【讨论】:

    • 你好,我还是不明白如果没有定义Backbone怎么触发keydown事件?
    • @dev.pus 检查我的更新答案:因为主干的事件是 jquery 的委托(api.jquery.com/delegate),所以 jQuery 的委托支持事件,主干可用。
    • 啊,现在我明白了,第一个词是 jQuery 事件名,第二个词是选择器。事件名称可以是以下任何一种:api.jquery.com/category/events。所以 keydown 实际上会一直工作,我应该在发布之前尝试过代码...... :)
    【解决方案2】:

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

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

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

    【讨论】:

    • 验证只是一个例子。你能给我一个完整的代码sn-p吗?我不明白如何注册不存在的事件(因为骨干网不提供它们),例如 example-keydown 事件
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多