Backbone Marionette,在所有视图中设置全局BeforeRender

时间:2014-02-27 13:25:29

标签: javascript backbone.js frameworks marionette

我正在尝试在我的网站中添加语言支持,我需要添加此代码,以便在所有视图中使用牵线木偶渲染之前运行它,无论哪种类型。

onBeforeRender: function(){

    var helpers = this.templateHelpers();
    this.templateHelpers = function(){
        return $.extend( (helpers), {
            lang : function () {
                return function(val, render) {
                    return lang(val);
                }
            }
        });
    }
}

我不想扩展所有视图并将这些代码放在每个视图中, 我想知道是否有办法将这些代码放在某个地方,它会在每次渲染之前运行

2 个答案:

答案 0 :(得分:3)

您应该可以使用

之类的东西扩展原型
_.extend(Marionette.View.prototype, {

    onBeforeRender: function(){

        var helpers = this.templateHelpers();
        this.templateHelpers = function(){
            return $.extend( (helpers), {
                lang : function () {
                    return function(val, render) {
                        return lang(val);
                    }
                }
            });
        }
    }

})

当然,这意味着如果您的一个牵线木偶视图定义了自己的onBeforeRender,您需要手动调用View原型上的实现。“

答案 1 :(得分:0)

我认为您应该使用您的代码创建一个视图mixin并使用此mixin扩展每个视图

var LangMixin = { 
    onBeforeRender: function(){
        var helpers = this.templateHelpers();
            this.templateHelpers = function(){
                return $.extend( (helpers), {
                    lang : function () {
                    return function(val, render) {          
                        return lang(val);
                        }                                                                       
                    }   
                }); 
           }            
    }
}   

var YourView= Backbone.View.extend({
     // ...
});

_.extend(YourView.prototype, LangMixin);