[英]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.