考虑以下模板:
'布局'是我的顶级模板,我指定使用:
Router.configure({
layoutTemplate: 'layout',
});
在layout.html内部,我有以下内容:
<main id="site-main" role="main">
{{>Template.dynamic template=page.pageLayoutTemplate }}
</main>
我从路线传递了一些数据:一个页面对象,其中包含一个属性&quot; pageLayoutTemplate&#39;,其值为&#39; pageLayoutStandard&#39;。
Inside&#39; pageLayoutStandard&#39;模板,我有:
{{> yield }}
如果我访问&#39; / about-us&#39;路线,我渲染了&#39; aboutUs&#39;模板到&#39; pageLayoutStandard&#39; - 不用担心。
现在我的问题......
在我的'aboutUs&#39;模板,我希望&#39;数据&#39;实例的属性,用于包含从铁路由器传递下来的数据。但是,我发现我的数据属性包含一个&#39;模板&#39;宾语;具体来说,它包含&#39; pageLayoutStandard&#39;。
所以看起来像&#39;产量&#39;不喜欢住在子布局中 - 它希望生活在顶级布局中,以便从路线中获取数据。我通过将我的收益率转移到顶层布局 - &#39; aboutUs&#39;模板然后获得正确的数据。
我有什么方法可以得到&#39;产生&#39;在子布局中存在时获取正确的数据上下文?
答案 0 :(得分:2)
一种解决方案是使用
访问数据Router.current().data()
答案 1 :(得分:1)
我自己对Iron-Router相当新,但我相信它可能是一个类似的问题,我用另一种方式来解决。您的问题中也存在一些含糊之处,例如您在何处以及如何具体定义数据上下文。
基本上我发现{{> yield}}
创建了自己的<body>
标签。这也意味着像Template.body.events();
这样的内容不会传播到这个新的铁路由器<body>
中。这是一个已知的"bug" with Iron-Router。
我们已经开发了workaround来解决这一特定问题,但我不确定它与您的案例相关,或者至少可能无法解决问题,因为您是不希望传播主体模板。
最后,正如您所提到的那样,您的路由逻辑可能与Iron-Router的预期用途有所颠倒。
我相信一个更好的方法来执行你想要的东西:
<main id="site-main" role="main">
{{> yield}}
</main>
在路由器定义中使用类似的内容
Router.map(function (){
this.route("/about-us", {
template: "pageLayoutStandard"
}
});
然后,您应该能够按照惯例设置数据上下文和渲染。