2015-05-07 2 views
1

Так что я пытаюсь вернуть значение базы данных mongoDB в шаблон в проекте Meteor.js. Код, который я использую, приведен ниже.Не удается получить meteor.js для возврата коллекции mongo

Template.ResourceManager.helpers({ 
BoosterOneFuel : function(){ 
     return resources.findOne({system : "booster1"}).fuel; 
} 

}); 

Однако это всегда возвращает null. Когда я пытаюсь предупредить его, в предупреждении также указывается, что это значение равно null. Монго может найти его, когда я запускаю эту строку в консоли во время работы метеоритного Монго:

db.Resources.findOne({system : "booster1"}).fuel; 

Но метеор не может. (Это на локальном хосте, поэтому метеорный Монго должно влиять на базу данных метеора)

Я не думаю, что его проблемы с метеора нагружения до Монго делает, потому что следующий по-прежнему не работает:

if(resource.find({system : "booster1"})) 
    alert(resources.findOne({system : "booster1"}).fuel); 

Кто-нибудь знает, что здесь происходит? Спасибо заранее.

+1

Вы уверены, что нашли ошибку? Я вижу ресурсы «Ресурсы», «Ресурсы», «Ресурс» ... – sebnukem

+0

подписывается ли вы на сбор ресурсов на клиенте? –

ответ

4

Предполагая, что коллекция на самом деле называется resources - то есть у вас есть что-то, что выглядит как:

resources = new Mongo.Collection('Resources'); 

Тогда это звучит, как вы просто должны опубликовать документы клиента:

сервера/издателей .js

Meteor.publish('resources', function() { 
    return resources.find(); 
}); 

клиент/подписки. JS

Meteor.subscribe('resources'); 

Конечно подписка может произойти в шаблоне или маршрутизатор, а не глобально, но это выходит за рамки данного вопроса.

Также обратите внимание, что вы должны добавить guard вашему помощнику. Например:

Template.ResourceManager.helpers({ 
    BoosterOneFuel : function() { 
    var b1 = resources.findOne({system : "booster1"}); 
    return b1 && b1.fuel; 
    } 
}); 
+0

Эй, Дэвид .... Я следую учебнику для версии 1.5 (сборник). У меня такая же проблема. Не знаю, что случилось. Запрос в метеорной консоли показал документ. Есть ли способ отладить это, поскольку браузеры не показывают здесь ошибок ...? –

+0

Без лишнего контекста я не уверен, что предложить. Вы уверены, что ваш помощник (или какая-либо функция ссылается на коллекцию) получает вызов? –

+0

Мне что-то нравилось. Думаю, я не совсем понимаю «импорт». В учебнике сказано добавить «import» ../ import/api/tasks.js '; 'в client/server main.js. Я изменил это на 'import {Tasks} из '../ import/api/tasks.js'', и он решил это. –

Смежные вопросы