2015-03-19 58 views
0

我正在根據Session變量檢索Collection文檔,然後通過iron:router數據上下文將其作爲變量傳遞給store。問題在於它有時會返回undefined,好像它沒有及時準備幫助程序執行。我如何確保變量總是在助手/模板運行之前定義?從路由器數據中未定義的輔助變量

這裏是我的路線,你可以看到數據上下文包括檢索基於存儲在Session變量的_id集合的文檔:

Router.route('/sales/pos', { 
    name: 'sales.pos', 
    template: 'pos', 
    layoutTemplate:'defaultLayout', 
    loadingTemplate: 'loading', 
    waitOn: function() { 
     return [ 
      Meteor.subscribe('products'), 
      Meteor.subscribe('stores'), 
      Meteor.subscribe('locations'), 
      Meteor.subscribe('inventory') 
     ]; 
    }, 
    data: function() { 
     data = { 
      currentTemplate: 'pos', 
      store: Stores.findOne(Session.get('current-store-id')) 
     } 
     return data; 
    } 
}); 

在此可以依賴於store變量幫手被傳遞給模板:

Template.posProducts.helpers({ 
    'products': function() { 
     var self = this; 
     var storeLocationId = self.data.store.locationId; 

     ... removed for brevity ... 
     return products; 
    } 
}); 

回答

2

這是流星中的一個常見問題。當你等待你的訂閱準備就緒時,這並不意味着你的查找函數有時間返回一些東西。你可以用一些防禦性編碼來解決它:

Template.posProducts.helpers({ 
    'products': function() { 
    var self = this; 
    var storeLocationId = self.data.store && self.data.store.locationId; 
    if (storeLocationId) { 
     ... removed for brevity ... 
     return products; 
    } 
    } 
}); 
+0

嗯,我還是很想。好,夠公平的,我現在必須解決這個問題。 – 2015-03-19 06:29:46