【问题标题】:Iron router dynamic template rendering铁路由器动态模板渲染
【发布时间】:2014-12-14 00:37:45
【问题描述】:

在我的流星项目中,我添加了 iron:layout、iron:dynamic-template 以及 iron:router。

我的问题是,如果 Session 中没有可用数据,如何防止动态模板呈现?原因是,动态模板当前正在渲染其中包含除数据上下文之外的所有 html 内容。这是用户最初到达页面时的问题。

我在“postlist”模板上有一个姓名列表。这些是创建帖子的人的“用户名”。当用户单击名称时,模板“viewpost”会呈现并传递相关数据……这很好。但如前所述,当用户第一次到达页面时,没有数据上下文。所以看到除了动态内容之外的所有内容。

以下是我当前的代码,从我以前的帖子中获得了帮助。 Meteor: Render template inside a template

HTML:

<template name="postlist"> 
  <div class="container">
   <div class="col-sm-3">
    {{#each post}}
    <li><a href="#">{{fullname}}</a></li>
    {{/each}}
   </div>
  </div>
  {{> Template.dynamic template='viewpost' data=currentPost}}
</template>

点击事件捕获帖子_id/帮助文件:

Template.postlist.helpers({
currentPost: function(){
    return Posts.findOne(Session.get('currentPost'));
}
});
Template.postlist.events({
'click li': function(e){
    e.preventDefault();
    Session.set("currentPost", this._id);
}
});

【问题讨论】:

  • 以下内容不适合您的目的吗? eventedmind.github.io/iron-router/#waiting-on-subscriptions
  • 我删除了我在答案 1 中显示的助手尝试了这个。但是模板仍然被渲染。我还将模板上的插入更改为 {{> viewpost}} 但它仍然会被渲染。请参考答案 2 以查看我插入的代码。

标签: templates meteor iron-router spacebars


【解决方案1】:

这是另一种黑客方法,但理解不是好习惯。这就是我实际上想要实现的,所以你有一个想法。但我想针对这个问题提出非黑客建议。谢谢你。

html:

<template name="viewpost">
    {{#if hasData}}
      <div class="container">
          Post creator is : {{username}} - Info: {{body_text}}
      </div>
    {{/if}}
</template>

js:

Template.viewpost.helpers({
 "hasData":function(){
   return Session.get("currentPost");
}
});

【讨论】:

    猜你喜欢
    • 2015-12-24
    • 1970-01-01
    • 2015-12-30
    • 2015-06-03
    • 2015-05-24
    • 1970-01-01
    • 2015-12-20
    • 2015-01-18
    • 1970-01-01
    相关资源
    最近更新 更多