我见过类似的问题,但无法将其应用于我的案例......
我的路线定义为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
这样的网址访问该视图,以查找所有哈利波特的书籍。
我不理解的东西......页面呈现两次,首先说没有结果然后显示结果。 你知道为什么吗?
谢谢!
答案 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将一直显示,直到您的数据准备就绪,然后订阅的数据将在您的主“主页”模板中呈现。
我希望有所帮助。