Handlebars.js: 注册全局变量。

创建于 2016-02-22  ·  7评论  ·  资料来源: handlebars-lang/handlebars.js

有时为模板提供全局变量很有用。
一些示例可能包括以下内容:

  • 活动用户对象。
  • 应用程序配置(标题、描述、元数据)
  • 路由信息(路径、哈希等)。

我在想添加类似的东西会很酷:

var hbs = require("handlebars");

hbs.registerGlobal({
   title: "myapp"
});

可以在任何模板中引用,可能通过@global.title@title或只是title

想法?

docs-needed

最有用的评论

@kpdecker template(context, {data: {global: global}})没有明确记录。
我见过的最接近的是template({}, {data: {level: Handlebars.logger.WARN}})

但是文档没有提到可以传递第二个参数

所有7条评论

我在考虑这个问题,我认为创建一个内联助手可以做你想做的事。

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就是答案。 关闭它,但仍应添加文档。

还没有记录?

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

LengYXin picture LengYXin  ·  3评论

snimavat picture snimavat  ·  5评论

stevenvachon picture stevenvachon  ·  7评论

NickCis picture NickCis  ·  4评论

novwhisky picture novwhisky  ·  4评论