2012-05-02 3 views
2

Должно быть, у меня что-то не хватает, но вот моя проблема. У меня есть коллекция документов, которая содержит поля «title» и «content».Доступ к содержимому запроса БД

Когда я перейти к конкретному URL, скажем,

http://localhost:3000/document/33ea5676-4f8f-4fe4-99d5-fe094556933d 

Я хватаю документ _id из URL, сохранить его с помощью Session.set('docID',_id) и затем хотите, скажем, отобразить название документа. У меня есть шаблон:

<template name='document'> 
    <h2>My document is called {{document.title}}</h2> 
</template> 

, а затем в моем файле client.js, у меня есть:

Template.document.document = function() { 
    doc = Documents.findOne({'_id':Session.get('docID')}); 
    return doc; 
} 

Но это не работает: я получаю сообщение об ошибке по линии:

Cannot read property 'title' of undefined 

Поскольку, конечно, перед доступом к полю документ должен быть извлечен из базы данных. Если я позвоню,

Template.document.document().title 

С консоли я получаю заголовок. Я пробовал сделать конкретную функцию заголовка,

Template.document.title = function() { 
    doc = Documents.findOne({'_id':Session.get('docID')}); 
    return doc.title; 
} 

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

Должно быть, я должен упустить что-то принципиальное. Благодарю.

+2

дубликат http://stackoverflow.com/questions/10167464/meteor-rendering-template-with-a-document-from-a-collection Короткий ответ: 'return doc && doc.title' – danny

+0

Это сделало. Благодарю. –

ответ

1

Попробуйте использовать 'с' в шаблоне:

Template.document.document = function() { 
    return Documents.findOne({'_id':Session.get('docID')}); 
} 

<template name='document'> 
    {{#with document}} 
    <h2>My document is called {{title}}</h2> 
    {{/with}} 
</template> 
Смежные вопросы