从基本视图自动扩展事件

Mau*_*ord 18 backbone.js

我有一个所有视图的基类,然后在应用程序的每个部分,如配置文件,我也有一个基类.这样,共享模板和属性可以在我的应用程序中在许多级别上使用.

我知道如果你在Backbone视图中创建一个函数而不是一个对象文字,它将为你实例化,但我不知道如何使用它对我有利.我的问题是,自动扩展在基本视图中创建的事件的最佳方法是什么.

我知道一种可能性,我在视图初始化时,获取基本事件类并将当前事件扩展到它,但它似乎有点hacky,我将不得不在每个视图上复制此代码.如果您知道更好的方式,请分享.

谢谢.

Joh*_*nny 35

var ParentView = Backbone.View.extend({
    'events': {
        'click .parent-something': "onParentSomethingClick"
    }
}); 

var ChildView = ParentView.extend({
    'events': _.extend({
        'click .something': 'onSomethingClick',
    }, ParentView.prototype.events)
});
Run Code Online (Sandbox Code Playgroud)

它什么都不做,但这是迄今为止我见过的最简单的方式.
我还用另一种方式创建了一个要点:https://gist.github.com/1271041

  • 你不想把你的对象传递到_.extend()吗?即克隆然后用新事件覆盖超类的事件?这样,您可以使用子功能覆盖超级功能,这是一种更熟悉的继承方法. (2认同)

Joh*_*ika 6

以下是我在子视图中扩展父视图事件的方法:

var ParentView = Backbone.View.extend({

        events: {
            'click .link': 'onLinkClick'
        }
});

var ChildView = ParentView.extend({

        events: function(){
            return _.extend({
                'click .something': 'onSomethingClick',
            }, this.constructor.__super__.events);
        }
});
Run Code Online (Sandbox Code Playgroud)

注意:这仅适用于Backbone 0.5.3.在该版本之前,您无法将事件定义为函数.