繁体   English   中英

流星大火渲染两次

[英]Meteor blaze rendered twice

我已经看到了类似的问题,但无法将其应用于我的情况...

我用iron-router定义了一条路线:

this.route('home', {
  path: '/',
  template: 'home',
  waitOn: function(){
    return [Meteor.subscribe('books'),Meteor.subscribe('authors'))];
  },
onBeforeAction: function(){
  Session.set('search_keywords', this.params.search);
  }
});

在我的home.js文件中,我得到了一个助手来显示这样的books

Template.booksList.helpers({
  books: function () {
    if(Session.get("search_keywords")){
      keywords = new RegExp(Session.get("search_keywords"), "i");
      var result = Books.find({$or:[{name:keywords},{description:keywords},{tags:keywords}]},{sort: {updatedAt: 1}});
      if(result.count()===0){
         console.log('no results found')
         return [];
      }else{
        return result;
      }
    }
   }
 });

并在home.html

<template name="booksList">
 <div class="row">
  {{#each books}}  
    {{> bookDetail}}
  {{/each}}
 </div>
</template>

目的是从类似http://mydomain.com/?search=Happy%20Potter的URL访问视图以查找所有哈利波特书。

我不明白的是...页面被渲染两次,首先说没有结果,然后显示结果。 你明白为什么吗?

谢谢 !

看看铁路由器的文档。 特别是,在WaitOn挂钩上的此部分描述了loadingTemplate的用法。

参见: https : //github.com/EventedMind/iron-router/blob/dev/DOCS.md#waiting-on-subscriptions-waiton

您可以像设置路由模板一样来设置loadingTemplate。 例如,

this.route('home',{path:'/',template:'home',loadingTemplate:'loading',...

将显示loadingTemplate,直到您的数据准备就绪为止,然后来自订阅的数据将呈现在您的主“主页”模板中。

希望对您有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM