У меня есть приложение «back end», которое записывается в MongoDb (в базе данных у меня есть _id: с ObjectId («13f6ea ... 002»)). Я использую приложение meteor для отображения информации. Все было хорошо, я показываю список информации с помощью {{#each}}. Но когда я хотел показать один элемент с «_Id», ничего не работает.Как показать данные из mongoDB с ObjectID
Я прочитал this issue и адаптирую свой код, чтобы получить правильный корень, но я не могу ничего отобразить на странице. Я пытался писать шаблонов хелперы, но это не помогло
Db запись:
{
_id: ObjectId("13f6ea...002"),
url: "foo",
title: "bar",
published: "2014-08-22 03:26:21 UTC",
image: "foo.jpg",
summary: "foo ",
categories: [
"F",
"B"
],
...
}
Маршрут:
this.route('news', {
path: '/news/:_id',
template: 'news',
waitOn: function() {
var id = this._id;
Meteor.subscribe('news', id);
},
data: function() {
var id = this.params._id;
return News.findOne({ _id: Meteor.Collection.ObjectID(this.params._id)});
},
action : function() {this.render();},
});
Опубликовать
Meteor.publish('news', function(id) {
return News.find({_id: id});
});
шаблона, который перенаправляет на уникальный пост
<h4><a href="{{pathFor 'news' _id=this._id.toHexString}}">{{title}}</a></h4>
И шаблон просто {{news}}
Как я могу это исправить?
UPDATE
Мои решения поправим:
router.js
waitOn: function() {
var id = this._id;
Meteor.subscribe('News', id);
},
data: function() {
return News.findOne(new Meteor.Collection.ObjectID(this.params._id));
},
и в шаблоне
<a href="news/{{_id._str}}">
Спасибо, что для вашего ответа вы правы, я получаю «undefined». Но не могу понять, что не так с моим .findOne – yan
Получаете ли вы результат, если вы просто запускаете тот же запрос 'findOne' с консоли? Если у вас есть атрибут 'data', определенный в вашем контроллере маршрутов (если он у вас есть), я думаю, что это переопределит контекст, установленный в самом маршруте, но если ваш запрос ничего не возвращает при запуске в консоли, то это где ваша проблема есть. – richsilv
Я получаю 'TypeError: this.params undefined' У меня есть waitOn (не уверен, что мне нужно) и функция данных в моем маршруте, как я написал выше. – yan