尝试直接在模板助手中通过_id检索文档,而不是在流星中工作

时间:2015-04-03 15:43:18

标签: meteor

我正试图通过文档的_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

非常感谢您的帮助!

更新了问题以引用当前错误并建议更改。

此外,我不能在这个项目中使用铁制路由器,因为我使用的聚合物部分不能很好地与之配合使用。

2 个答案:

答案 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。