【问题标题】:Meteor blaze rendered twice流星火焰渲染了两次
【发布时间】:2014-07-08 11:56:06
【问题描述】:

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

我用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 之类的网址访问视图以查找所有哈利波特书籍。

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

谢谢!

【问题讨论】:

  • 是的,这很正常。如果您不喜欢这样,那么您可以查看 Iron-router 的 loadTemplate 选项。在您waitOn的数据到达之前,它将显示不同的模板。

标签: javascript meteor meteor-blaze


【解决方案1】:

查看有关 Iron-router 的文档。特别是关于 WaitOn 钩子的这一部分,它描述了 loadingTemplate 的使用。

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

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

this.route('home', { 小路: '/', 模板:'家', loadingTemplate: '正在加载', ...

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

希望对你有帮助。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2014-05-07
  • 1970-01-01
  • 2016-05-18
  • 1970-01-01
  • 2011-05-25
  • 2016-06-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多