4

我正在使用出色的框架 Backbone.js 开发简单的应用程序,如果我可以制作可配置的主干视图事件选择器会很好,例如这种方式它不起作用,因为它是错误的 js 语法:

return Backbone.View.extend({
    events: {
        'click ' + someConfigSelector: 'doSomethink'
    }
})

有没有其他方法可以在 Backbone 视图中设置事件?

4

3 回答 3

7

看看这个小提琴:http: //jsfiddle.net/phoenecke/hyLMz/1/

您可以使用函数events代替对象。

return Backbone.View.extend({
    events: function() {
        // add some normal events to the hash
        var e = {
            'click #foo': 'doSomething1',
            'click #bar': 'doSomething2'
        };
        // add one where key is calculated
        e['click ' + someConfigSelector] = 'doSomething';
        // return events hash
        return e;
    }
});

这样,您可以添加您的事件,其中根据您的配置计算密钥。

于 2013-03-15T14:59:07.307 回答
1

对于动态事件,我更喜欢下面的方法,因为这个函数会在任何时候delegateEvent被调用。

根据在视图函数执行后调用的 delegateEvent 上的文档,您可以使用此技术动态创建事件:initialize

var TestView = Backbone.View.extend({    
    events: function () {
        var evt = {};
        evt['click ' + this._extraSelector] = '_onButtonClick';
        return evt;
    },
    initialize: function(config) {
        // passed in the selector, or defaulted 
        this._extraSelector = config.extraSelector || "BUTTON.default";
    }, 

    _onButtonClick: function() { }
});

var v = new TestView({ extraSelector: 'BUTTON.sample' });
于 2013-03-15T14:59:26.970 回答
0

你可以这样做:

return Backbone.View.extend({
    events: { },

    initialize:function() {
        this.events['click ' + someConfigSelector] = 'doSomethink';
    }
})

但它有点打破了如何在主干中声明事件的惯例,并使代码更难阅读。也许有人有更好的方法。

于 2013-03-15T14:28:37.203 回答