2015-04-21 6 views
0

Я пытаюсь получить доступ к моей коллекции продуктов в Minimongo на странице html. Когда я нахожусь в консоли браузера, я могу ввести Products.findOne(); и он вернет продукт.Доступ к minimongo из шаблона helper meteor/mongodb

Однако, когда я пытаюсь вернуть продукт из моего помощника шаблона, я получаю неопределенное. Мысли кто-нибудь?

Template.Tires.onRendered(function() { 
console.log(Products.findOne()); 
//after I return a product item, I need to modify its properties manually after it has loaded into the client 

}); 
+0

Похоже, вы пытаетесь получить доступ к базе данных клиента ('' продуктов), прежде чем он имеет полученные данные с сервера. Когда вы вводите запрос в свою консоль, коллекция всегда получала все необходимое, но если вы сразу же выполняете запрос (например, в помощнике), прежде чем он будет готов, вы ничего не получите. Попробуйте отправить свои коды маршрутизаторов/шаблонов, если таковые имеются, чтобы у нас был некоторый контекст для работы. –

+0

Спасибо, я отправил свой код шаблона. Если это так, есть ли способ, по которому я могу отложить запрос до завершения загрузки данных? –

+0

за небольшим исключением, теги сценария не используются в метеор. вместо этого используйте помощник. Я действительно рекомендую вам изучить основы, прежде чем расстраиваться. Https://www.meteor.com/learn –

ответ

1

Простой ответ: делать то, что изменения нужно сделать на сбор в вспомогательную функцию, а затем возвращают объект JS. Например, если вы коллекция выглядит примерно так:

SomeColleciton 
    _id 
    type: String 
    birthday: 
    type: Date 
    firstname: 
    type: String 
    lastname: 
    type: String 
    timezone: 
    type: Integer 

вы можете сделать следующее, чтобы превратить его

Template.Tires.helpers({ 
    user: function(userId) { 
    var u = SomeCollection.findOne(userId); 
    var age = calcAge(u.birthday); 
    var ifworkinghour = calcifworkinghour(u.timezone); 
    return {name: u.firstname + ' ' + u.lastname, age: age, workinghour: ifworkinghour} 

}); 
+0

Спасибо. Таким образом, будет возвращена информация для одного пользователя. И, чтобы назвать это в шаблоне, я могу сделать {{user ('someUserid')}}, правильно? –

+0

Да. Хотя это должно быть синтаксически корректным, {{user someUserId}} будет работать. –