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

requirejs / backbone : declare a global function / variable

是否可以在 backbone / marionnette 应用程序中声明一个 全局函数,调用精确模块的函数?

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

lang.item(ID, p1, p2, p3, ... )

我到处都用这个,有一个我称之为 "lang" 的模块。示例:

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'));
       }
       ...
   });
});

我总是必须包含 "lang" 模块,这样我才能使用它。因为我调用它并在任何地方使用它,所以我喜欢在任何需要的地方使用像 lang(ITEM_ID) 这样的简单全局函数,而不必包含"lang" 模块每次。

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

有人有解决办法吗?

我建议在您的 main javascript 文件中使用它,供 requireJS 使用:

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

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

就我个人而言,我不认为这有违任何编码标准。让我知道它是否有效。