我尝试从流星0.8.2移动到流星0.8.3,但我有一个很大的问题: 在浏览器中,更新导致waitOn挂钩无限循环。
我有3条主要路线: * / * /列表 * / item /:_ id
2首先运作良好。在/ list我有一个waitOn挂钩,只订阅一个Collection。 但在最后一条路线上,没有任何作用: 浏览器循环遍历waitOn钩子,它很快就冻结了浏览器。
这是控制器:
SearchController = RouteController.extend({
template: "mainApp",
waitOn: function funcClientRouteWaitOnSearch() {
console.log('waitOn', this.ready(), Annonces.find().count());
if (Lbc.Annonces.Animation.previousSearch !== Lbc.Annonces.Animation.currentSearch
&& Annonces.find({"searchIndex": Session.get('selectedSearch')}).count()) {
console.log('Use cache from SubsManager');
Lbc.Annonces.Animation.inCache = true;
} else {
console.log('NO CACHE in SubsManager');
}
return [
subsSearch.subscribe("Annonces",
Session.get('selectedSearch'),
Session.get('selectedFilter'),
Session.get('selectedLocation'),
Session.get('loadMore'), function funcSubAnnoncesOnReady() {}),
subsSearchList.subscribe("PostCodes",
Session.get("selectedSearch")),
Meteor.subscribe("SearchIndexIds")
];
},
onRun: function funcClientRouteOnRunSearch() {
console.log('onRun', this.ready(), Annonces.find().count());
Lbc.Annonces.Animation.previousSearch = Lbc.Annonces.Animation.currentSearch;
Lbc.Annonces.Animation.currentSearch = this.params._id;
Lbc.Session.prepareSession(this.params._id);
},
onBeforeAction: function funcClientRouteBeforeSearch() {
console.log('onBeforeAction', this.ready(), Annonces.find().count());
Meteor.subscribe("counters-annonces",
Session.get("selectedSearch"),
Session.get('selectedFilter'),
Session.get('selectedLocation'),
Session.get('lastChangeStatusTime')
);
Meteor.subscribe("counters-new-annonces",
Session.get('selectedSearch'),
Session.get('selectedLocation')
);
},
action: function funcClientRouteActionSearch() {
console.log('action', this.ready(), Annonces.find().count());
var searchIndexInfo = SearchIndexIds.findOne(this.params._id);
if (searchIndexInfo) {
searchAnnonces.Templater.setCurrentProvider(searchIndexInfo.url);
}
this.render();
filters.animation.call(this);
filters.notify.call(this);
},
onStop: function funcClientRouteStopSearch() {
console.log('onStop', this.ready(), Annonces.find().count());
Lbc.Annonces.Animation.doAnimation = false;
}
});
在onRun钩子中有一个对prepareSession的调用,它将为这些路由设置所有必需的Sessions var。然后在无限循环中调用waitOn。
我试图将订阅放在onBeforeAction钩子中并且它有效,但它不是我需要的行为。有什么解决方案吗? 我删除了SubsManager包以查看它是否是问题的根源,但事实并非如此。
我打开了一个问题:iron-router issue 741
此处提供了该应用的示例版本:moveto083和用户test123 / test123
感谢您的帮助