requirejs / backbone:声明一个全局函数/变量

时间:2015-09-17 13:59:42

标签: backbone.js requirejs marionette require

是否可以在骨干/ marionnette应用程序中声明全局函数,该应用程序调用精确模块的功能?

这个问题可能听起来很奇怪,因为我个人建议不要这样做,因为使用模块很棒并保持app结构清洁。我需要一个全局函数,因为我的应用程序的所有单个视图/模板中都有一个模块/函数。该函数是 lang.item()。例如:

define([ 'backbone', 'lang'], function(Backbone, lang){
   return Backbone.View.extend({
       ...
       template: _.template('<%= lang.item("welcome") %> <%=username%>'),
       onError: function(){
            this.ui.error.html(lang.item('wrong_login'));
       }
       ...
   });
});

我在任何地方都使用这个,我使用的模块叫做#34; lang&#34;。示例:

define(['Backbone'], function(Backbone){
   return Backbone.View.extend({
       ...
       template: _.template('<%= lang("welcome") %> <%=username%>'),
       onError: function(){
            this.ui.error.html(lang('wrong_login'));
       }
       ...
   });
});

我总是要包括&#34; lang&#34;模块,所以我可以使用它。因为我把它称之为并在任何地方使用它,我希望在我需要的任何地方使用像 lang(ITEM_ID)这样的简单全局函数,而不必包含&#34; lang&#34 ;模板每次。

function randomColor(format = 'hex') {
    const rnd = Math.random().toString(16).slice(-6);
    if (format === 'hex') {
        return '#' + rnd;
    }
    if (format === 'rgb') {
        const [r, g, b] = rnd.match(/.{2}/g).map(c=>parseInt(c, 16));
        return `rgb(${r}, ${g}, ${b})`;
    }
}

有人有解决方案吗?

1 个答案:

答案 0 :(得分:1)

我建议在main使用的requireJS javascript文件中使用此文件:

define('init', function (require) {
    ...
    window.lang = require('lang');
    ...
});

// Initialize the application.
require(['init']);

就我个人而言,我认为这并不违反任何编码标准。如果有效,请告诉我。