我正试图通过文档的_id
直接在meteor中检索文档。
这是我的帮手:
Template.lesson.helpers({
lesson: function() {
//url format: http://localhost:3000/lesson/CroFdSKNBriy7QCHL
var url = window.location.href;
var result= url.split('/');
var id = result[result.length-1];
console.log('url: '+url);
console.log('id: '+id);
var lessonsData = Lessons.findOne({_id: id});
return lessonsData;
}
});
这正确地从网址抓取了id。
我认为问题在于id是字符串格式。
如何传递meteor/mongo
格式的值,正在寻找id
?这是我收到的错误消息。
模板助手中的异常:ReferenceError:未定义lessonData
非常感谢您的帮助!
更新了问题以引用当前错误并建议更改。
此外,我不能在这个项目中使用铁制路由器,因为我使用的聚合物部分不能很好地与之配合使用。
答案 0 :(得分:1)
生成此内容。
//url format: http://localhost:3000/lesson/CroFdSKNBriy7QCHL
你应该有这样的东西(例如)。
//Router.js
Router.route('/lesson/:_id', {
name: 'lesson',
data: function() {
Session.set('lessonId',this.params._id) //take the id from here.
return Lessons.findOne({_id: this.params._id);
}
});
现在是帮手。
Template.lesson.helpers({
lesson: function() {
//url format: http://localhost:3000/lesson/CroFdSKNBriy7QCHL
var id = Session.get('lessonId')
var lessonsData = Lessons.findOne({_id: id}); //like around says you don't need the fetch(), since you are only returning 1 object.
return lessonsData;
}
});
编辑你的问题,好像你有一个拼写错误,就像错误一样。
将帮助器语句的返回值更改为return lessonsData
答案 1 :(得分:0)
var lessonsData = Lessons.findOne({_id: id}).fetch();
如果您使用findOne,则无需使用fetch直接获取对象,因此fetch()
不是函数。
顺便说一句,如果你使用铁路由器,你可以通过Router.current().params.yourparameter
而不是使用javascript window.location直接获取url的参数。
另一个错误是你有
var lessonsData = Lessons.findOne({_id: id}).fetch();
return lessonData;
您在第一个带有S而不是返回时键入lessonsData。