铁路由器子布局 - 获取产量的数据上下文

时间:2015-10-12 23:54:05

标签: meteor iron-router

考虑以下模板:

  1. 布局
  2. pageLayoutStandard
  3. 关于我们
  4. '布局'是我的顶级模板,我指定使用:

    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;在子布局中存在时获取正确的数据上下文?

2 个答案:

答案 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"
  }
});

然后,您应该能够按照惯例设置数据上下文和渲染。