0

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

我有一个路线定义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>

目的是从一个 URL 访问视图,例如http://mydomain.com/?search=Happy%20Potter查找所有哈利波特书籍。

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

谢谢 !

4

1 回答 1

0

查看 Iron-router 的文档。特别是关于 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 将一直显示,直到您的数据准备就绪,然后来自订阅的数据将呈现在您的主“主页”模板中。

我希望这会有所帮助。

于 2014-07-08T03:56:06.590 回答