我正在使用 Iron-router 包,但在访问模板中的全局数据时遇到问题。我有一个 router.js 至极定义:
路由器.js
var addMyData = function() {
this.data = {myProp: 'value'};
}
Router.before(addMyData);
它工作正常。如果我需要在“每个” Handlebars 内使用它,我可以使用以下方式访问数据:
我的模板.html
<template name='myTemplate>
{{myProp}} //Works fine!
{{#each something}}
{{../myProp}} //Also works fine!
{{/each}}
</template>
太棒了。但是,当我需要使用内部模板时,外部模板上的所有数据都会消失。示例:
我的模板.html
<template name='myTemplate>
{{myProp}} //Works fine!
{{#each something}}
{{> myInnerTemplate}}
{{/each}}
</template>
<template name='myInnerTemplate>
{{../myProp}} //Not works!
</template>
最奇怪的是 outerTemplate 中的所有数据都消失了。
这是一个错误,还是有另一种做法可以达到相同的目标?
谢谢。
最佳答案
我有一个 Handlebars 助手,我在我的所有项目中都使用它来解决这个问题,对 http://rockycode.com/blog/handlebars-loop-index/ 的代码进行了轻微修改。 ( CoffeeScript ):
Handlebars.registerHelper "iter", (context, options) ->
fn = options.fn
inverse = options.inverse
ret = ""
if context and context.length > 0
i = 0
j = context.length
while i < j
ret = ret + fn(_.extend({}, context[i],
i: i
context: context
parent: @
self: context[i]
))
i++
else
ret = inverse(@)
ret
将模板中的 {{#each}}
和 {{/each}}
替换为 {{#iter}}
和 {{/iter}}
,您将拥有新变量 parent
、context
和 self
,以及循环索引 i
,您可以在 iter
循环中使用(并扩展到子模板中)。
因此,在您的情况下,{{../myProp}}
应替换为 {{self.myProp}}
或 {{parent. myProp}}
(反复试验,一个或另一个应该工作)。我怀疑您的问题是 Iron Router 特有的。
关于javascript - 如何在 Meteor Iron-router 的内部模板中访问全局数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19687583/