meteor 0.8.3 + iron router = waitOn hook里面的无限循环

时间:2014-08-05 10:11:14

标签: meteor iron-router

我尝试从流星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

感谢您的帮助

0 个答案:

没有答案