有时为模板提供全局变量很有用。
一些示例可能包括以下内容:
我在想添加类似的东西会很酷:
var hbs = require("handlebars");
hbs.registerGlobal({
title: "myapp"
});
可以在任何模板中引用,可能通过@global.title
、 @title
或只是title
。
想法?
我在考虑这个问题,我认为创建一个内联助手可以做你想做的事。
var hbs = require("handlebars");
var myGlobal = {
title: "myapp"
};
hbs.registerHelper('global', function(key){
return myGlobal[key];
});
{{! in your template }}
<div>{{global "title"}}</div>
你可以用myGlobal
做任何事情
你可以
define('myGlobal', function(){
return {
title: "myapp"
};
});
...
var myGlobal = require('myGlobal');
myGlobal['newKey'] = 'something';
...
var hbs = require("handlebars");
var myGlobal = require('myGlobal');
hbs.registerHelper('global', function(key){
return myGlobal[key];
});
自然有一个缺点,比如你的键被覆盖了,但这就是你的全部。
IMO,在 Handlebars 本身内支持这一点将需要大量开销而收效甚微。
有许多选项,例如@rafde的帮助建议或在数据字段中传递全局,这实际上应该与上面建议的语法一起使用:
template(context, {data: {global: global}})
应该在{{@global.foo}}
中公开窗口上的所有内容,但我没有对此进行测试,您需要验证它是否确实有效。
@kpdecker template(context, {data: {global: global}})
没有明确记录。
我见过的最接近的是template({}, {data: {level: Handlebars.logger.WARN}})
但是文档没有提到可以传递第二个参数。
我们的文档经常缺乏,但如果你想帮助改进,那就太棒了。
这是经过广泛测试的: https ://github.com/wycats/handlebars.js/blob/master/spec/data.js#L1
为什么不能通过简单地在非变量对象中定义键/值对来做到这一点?
glabalPair = {title: "Title"};
https://github.com/wycats/handlebars.js/blob/master/spec/data.js#L1就是答案。 关闭它,但仍应添加文档。
还没有记录?
最有用的评论
@kpdecker
template(context, {data: {global: global}})
没有明确记录。我见过的最接近的是
template({}, {data: {level: Handlebars.logger.WARN}})
但是文档没有提到可以传递第二个参数。