2016-03-03 20 views
1

我在我的mongo集合中有6000個文檔,我需要在應用程序啓動時加載到流星客戶端。 在我的路線(位於應用程序/客戶端),我有這樣的:如何正確使用流星的ironRouter waitOn?

Router.map(function() { 
    this.route('home', { 
     path: '/', 
     template: 'dashboardWrapper', 
     waitOn: function() { 
      return Meteor.subscribe('nasdaq'); 
     }, 
     cache: true 
    }); 
}); 

我dashboardWrapper模板看起來是這樣的:

<template name="dashboardWrapper"> 
    {{#if Template.subscriptionsReady}} 
     {{> dashboard}} 
    {{/if}} 
</template> 

My dashboard template looks like this: 

<template name="dashboard"> 
    <div class="container"> 
     <h2>Priority - 1 Incidents Over Time</h2> 

     <div class="row"> 
      <div id="yearly-bubble-chart" class="dc-chart"> 
       <strong>Yearly Performance</strong> (radius: fluctuation/index ratio, color: gain/loss) 
      </div> 
     </div> 

     <div class="row"> 
      <div id="gain-loss-chart"> 
       <strong>Days by Gain/Loss</strong> 
       <a class="reset" href="javascript:gainOrLossChart.filterAll();dc.redrawAll();" style="display: none;">reset</a> 

       <div class="clearfix"></div> 
      </div> 

      <div id="quarter-chart"> 
       <strong>Quarters</strong> 
       <a class="reset" href="javascript:quarterChart.filterAll();dc.redrawAll();" style="display: none;">reset</a> 

       <div class="clearfix"></div> 
      </div> 

      <div id="day-of-week-chart"> 
       <strong>Day of Week</strong> 
       <a class="reset" href="javascript:dayOfWeekChart.filterAll();dc.redrawAll();" style="display: none;">reset</a> 

       <div class="clearfix"></div> 
      </div> 

      <div id="fluctuation-chart"> 
       <strong>Days by Fluctuation(%)</strong> 
       <span class="reset" style="display: none;">range: <span class="filter"></span></span> 
       <a class="reset" href="javascript:fluctuationChart.filterAll();dc.redrawAll();" style="display: none;">reset</a> 

       <div class="clearfix"></div> 
      </div> 
     </div> 

     <div class="row"> 
      <div id="monthly-move-chart"> 
       <strong>Monthly Index Abs Move & Volume/500,000 Chart</strong> 
       <span class="reset" style="display: none;">range: <span class="filter"></span></span> 
       <a class="reset" href="javascript:moveChart.filterAll();volumeChart.filterAll();dc.redrawAll();" 
        style="display: none;">reset</a> 

       <div class="clearfix"></div> 
      </div> 
     </div> 

     <div class="row"> 
      <div id="monthly-volume-chart"> 
      </div> 
      <p class="muted pull-right" style="margin-right: 15px;">select a time range to zoom in</p> 
     </div> 

     <div class="row"> 
      <div> 
       <div class="dc-data-count"> 
        <span class="filter-count"></span> selected out of <span class="total-count"></span> records | <a 
         href="javascript:dc.filterAll(); dc.renderAll();">Reset All</a> 
       </div> 
      </div> 
      <table class="table table-hover dc-data-table"> 
      </table> 
     </div> 

     <div class="clearfix"></div> 

    </div> 
</template> 

Meteor.client的相關部分看起來是這樣的:

if (Meteor.isClient) { 

    var ndx,data; 

    Template.dashboardWrapper.onCreated(function() { 
    var template = this; 
    template.subscribe("nasdaq"); 
    }); 

    Template.dashboard.onCreated(function() { 
      data = Nasdaq.find().fetch(); 
      ndx = crossfilter(data); 
    }); 

    Template.dashboard.onRendered(function(){ 

     var self = this; 
     self.subscribe("nasdaq", function() { 
      self.autorun(function() { 
       data = Nasdaq.find().fetch(); 
      }); 
     }); 

我期望的是,儀表板模板要等到納斯達克集合中的所有數據加載完畢。 發生什麼事絕對沒有 - 沒有數據也沒有錯誤。

如果我一起刪除ironRounter並刷新,我可以得到幾十條記錄(總數爲6000)。 有沒有一種方法可靠地強制應用程序等待,直到每一個文件加載?

回答

1

在加載當前模板之前嘗試訂閱,可能會起作用。

Router.route('/dashboardWrapper/:_id', { 
    name: 'dashboardWrapper', 
    waitOn: function() { 
     return [ 
      Meteor.subscribe('nasdaq') 
     ]; 
    }, 
    data: function() { 
     return Nasdaq.findOne(this.params._id); 
} 
}); 
相關問題