2013-05-02 25 views
1

我为骨干创建了一个mixin,我想知道是否有比合并事件散列更好的方法。合并mixin和Views的事件定义backbone.js

密新:

app.mixin.filter = { 
events: { 
    'click .label': 'toggle', 
    'keyup .file-search': 'updateSearchFilter' 
}, 
//more stuff 
} 

查看:

app.DashboardView = Backbone.View.extend({ 

    el: '.contentwrap', 

    dashEvents: {'click .project-btn': 'addProjectModal'}, 

    initialize: function() { 

    //other stuff 

    _.defaults(app.DashboardView.prototype.events, this.dashEvents); 

    //other stuff 

    } 
} 

_.extend(app.DashboardView.prototype, app.mixin.filter); 

我特别不满意调用事件哈希dashEvents。有什么方法可以将事件保持为“事件”? 还是有一个标准模式来处理这种问题?

回答

0
app.DashboardView = Backbone.View.extend({ 
    el: '.contentwrap', 
    events : _.extend({}, app.mixin.filters.events, { 
    'click .project-btn': 'addProjectModal' 
    }) 
} 
+0

孤立地看,这不实际工作。 – Stevo 2013-05-02 14:39:50

+0

其实我刚刚忘了'app.mixin.filter'中的'events'道具。但这是工作方法。你要求的模式,我给你。 – 2013-05-02 14:51:02

+0

@VitaliyPetrychuk据我的理解,这个问题不仅在扩展事件,而且方法。 – 2013-05-02 15:02:57

0

我在我的应用程序在做这个:

app.DashboardView = Backbone.View.extend(_.defaults({ 
    el: '.contentwrap', 

    events: _.defaults({ 
     'click .project-btn': 'addProjectModal' 
    }, app.mixin.filter.events) 

}, app.mixin.filter)); 

在这里,我想到了稍微不同的方式:

app.mixin.filter = function() { 
    _.defaults(this.events, { 
    'click .label': 'toggle', 
    'keyup .file-search': 'updateSearchFilter' 
    }); 
    _.defaults(this, { 
    // more stuff 
    }); 
} 

app.DashboardView = Backbone.View.extend({ 
    el: '.contentwrap', 
    events: {'click .project-btn': 'addProjectModal'} 
} 

app.mixin.filter.call(app.DashboardView.prototype); 
+1

这是不好的方法。您的mixins覆盖您的活动 – 2013-05-02 14:19:05

+0

@VitaliyPetrychuk感谢您的提示!得到它修复。 – 2013-05-02 14:39:11

+0

这符合我的愿望,不重新命名事件散列,我没有测试它,所以不知道它是否有效 - 但感觉和我的方法一样痛苦! – Stevo 2013-05-02 14:43:32