如何在Meteor Iron路由器的内部模板中访问全局数据

How to access global data inside a inner template on Meteor Iron-router

本文关键字:访问 数据 全局 内部 Meteor Iron 路由器      更新时间:2023-09-26

我正在使用 Iron-router 软件包,但在访问模板中的全局数据时遇到问题。我有一个路由器.js它定义了:

路由器.js

var addMyData = function() {
    this.data = {myProp: 'value'};
}
Router.before(addMyData);

它工作正常。如果我需要在"每个"车把中使用它,我可以使用以下方法访问数据:

我的模板.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 的所有数据都消失了。

这是一个错误,还是有另一种实践来实现相同的目标?

谢谢。

我有一个车把助手,我在所有项目中都使用它来解决这个问题,从 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}},您将拥有新的变量parentcontextself,以及循环索引i,您可以在iter循环中(以及扩展,在子模板中)。

因此,在您的情况下,{{../myProp}}应该替换为{{self.myProp}}{{parent.myProp}}(反复试验,其中一个应该有效)。我怀疑你的问题是否特定于铁路由器。