2

我正在使用 Iron-router 包,但在访问模板中的全局数据时遇到问题。我有一个 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 中的所有数据都消失了。

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

谢谢你。

4

1 回答 1

1

我在所有项目中都使用了一个 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}}用and替换{{/each}}模板中的{{#iter}}and {{/iter}},您将在循环中(以及扩展,在子模板中)使用新的变量parent, contextandself以及循环索引。iiter

因此,在您的情况下,{{../myProp}}应替换为{{self.myProp}}or {{parent.myProp}}(反复试验,一个或另一个应该起作用)。我怀疑您的问题是 Iron Router 特有的。

于 2013-11-01T19:34:43.580 回答