Handlebars模板,使用字符串键访问上下文变量

时间:2013-07-31 11:39:55

标签: javascript templates handlebars.js

假设我有一个像这样的把手模板:

      <script id="entry-template" type="text/x-handlebars-template">
       <div class="entry">
          <h1>{{i18n.title}}</h1>
       </div>
      </script>

我真正想做的是这样的事情:

var source   = $("#entry-template").html();
var template = Handlebars.compile(source);
var context = {"title.t":"My New Post"}
console.log(template(context));

当我尝试使用字符串作为键在上面的上下文中解析时,hanslebars就像密钥不可用一样。我明白,结构应该是这样的:

var context = {
    i18n:{
      title:'test'
    }
}

但是因为我将从外部源获取我的118n字符串,所以将它们用作键是更容易的。 啊,是的,我知道像i18n.js这样的项目,但实际的问题是:我可以在上下文对象中使用带有点的字符串键吗?如果是,我怎样才能从把手模板中访问它们?

2 个答案:

答案 0 :(得分:1)

老问题,但我仍想发布我发现的内容。

如果key:value对的键表示为字符串,则可以将字符串本身放在把手模板占位符中。

所以如果你的背景是:

var context = {
    "key":"value"
}

与此相反:

var context = {
    key: "value"
}

您可以在模板中执行此操作以显示值:

<p>{{"key"}}</p>

因此,把手会将其视为属性名称,并显示值。

示例:

var names = {
    "first": "John",
    "last": "Doe"
}
<script id="names-template" type="text/x-handlebars-template">
<p>First Name: {{"first"}}</p>
</script>

将输出:

名字:约翰

这尊重键字符串中的空格和其他字符,我们对其进行了测试,它也适用于字符串中的点。试一试,让我知道。

答案 1 :(得分:0)

不,你不能使用带点的键。这是因为它们是语法的一部分。如果你可以使用点,那么你将如何访问该元素的子元素?而不是点,使用下划线或短划线。它是一个标准的人尊重,因为它不会引入错误和其他奇怪的行为。