是否可以在骨干/ 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})`;
}
}
有人有解决方案吗?
答案 0 :(得分:1)
我建议在main
使用的requireJS
javascript文件中使用此文件:
define('init', function (require) {
...
window.lang = require('lang');
...
});
// Initialize the application.
require(['init']);
就我个人而言,我认为这并不违反任何编码标准。如果有效,请告诉我。