流星火焰渲染两次

时间:2014-07-08 01:52:15

标签: javascript meteor meteor-blaze

我见过类似的问题,但无法将其应用于我的案例......

我的路线定义为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这样的网址访问该视图,以查找所有哈利波特的书籍。

我不理解的东西......页面呈现两次,首先说没有结果然后显示结果。 你知道为什么吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

看一下铁路由器的文档。特别是,WaitOn钩子的这一部分描述了loadTemplate的使用。

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

您可以设置loadingTemplate,类似于为路径设置模板的方式。例如,

this.route('home',{   路径:'/',   模板:'家',   loadingTemplate:'loading', ...

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

我希望有所帮助。