如何在Meteor Iron路由器的内部模板中访问全局数据
How to access global data inside a inner template on Meteor Iron-router
我正在使用 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}}
,您将拥有新的变量parent
、context
和self
,以及循环索引i
,您可以在iter
循环中(以及扩展,在子模板中)。
因此,在您的情况下,{{../myProp}}
应该替换为{{self.myProp}}
或{{parent.myProp}}
(反复试验,其中一个应该有效)。我怀疑你的问题是否特定于铁路由器。
相关文章:
- jQuery从html访问数据
- 如何处理在javascript中访问数据结构的两个回调
- 无法使用变量访问数据 JSON
- nodejs API 查询如何访问数据
- 使用jquery循环表行并通过类名访问数据
- 从JavaScript对象访问数据's数组成员变量
- json访问数据未正确显示
- JSON可以't访问数据返回未定义
- AngularJS从另一个数据模型访问数据模型
- 回调访问数据
- RxJs:在flatMapMapLate之前访问数据最新
- 如何使用数据集访问数据属性值
- Chrome 扩展程序无法访问数据存储
- 角度:访问数据
- ExtJS v3 - 从表单面板内的网格面板访问数据
- 从外部 Javascript 文件访问数据
- 使用 AngularJS 从没有键值的 JSON 访问数据值
- Birt:从 beforeFactory 访问数据集的内容
- 访问数据结构中的元素
- 使用数组和对象的组合循环访问数据