2016-02-05 237 views
2

我試圖獲取一個集合中有一個條目外取:流星客戶端未定義幫手

客戶端/視圖/ home.js

criticalCrewNumber = ConfigValues.find({ 
    name: 'criticalCrewNumber' 
}).fetch()[0].value; 

但我發現了錯誤:

Uncaught TypeError: Cannot read property 'value' of undefined

如果我運行在瀏覽器控制檯的代碼,所期望的值返回一個字符串。

我嘗試了各種各樣的東西,例如使用findOne;將代碼放在應用程序的其他地方;使用鐵路路由器waitOn訂閱來,等等。到目前爲止,每次嘗試失敗,因爲我最終undefined

這裏的收集是如何定義,發佈和訂閱到:

的lib /配置/ admin_config.js

ConfigValues = new Mongo.Collection("configValues"); 

ConfigValues.attachSchema(new SimpleSchema({ 
    name: { 
    type: String, 
    label: "Name", 
    max: 200 
    }, 
    value: { 
    type: String, 
    label: "Value", 
    max: 200 
    } 
})); 

兩/收藏/ eventsCollection.js

if (Meteor.isClient) { 
    Meteor.subscribe('events'); 
    Meteor.subscribe('config'); 
}; 

server/lib/collections.js

``` Meteor.publish('events',function(){ return Events.find(); }); ('config',function(){ return ConfigValues.find(); }); ```

有誰知道發生了什麼事?謝謝。

+0

這是流星,非常常見的問題。你能說更多關於被調用的地方嗎?例如它是在onCreated中,還是隻在文件範圍? –

+1

在調用'find'時,Minimongo中沒有數據 - 數據庫的本地副本 - 這就是爲什麼'.find(...)。fetch()'返回空數組的原因。當您在控制檯中運行此行時,訂閱已準備好並且數據已經可用。 –

+1

發佈函數是什麼樣的? – Ivan

回答

1

考慮使用ReactiveVar(和Meteor.subscribe回調):

criticalCrewNumber = new ReactiveVar(); 

Meteor.subscribe('config', { 
    onReady: function() { 
     var config = ConfigValues.findOne({name: 'criticalCrewNumber'}); 
     if (config) { 
      criticalCrewNumber.set(config.value); 
     } else { 
      console.error('No config value.'); 
     } 
    }, 

    onStop: function (error) { 
     if (error) { 
      console.error(error); 
     } 
    } 
});