首页 文章

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

提问于
浏览
1

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

这正确地从URL中获取id .

我假设问题是id是字符串格式 .

如何以 meteor/mongo 格式传递值,以查找 id ?这是我收到的错误消息 .

模板助手中的异常:ReferenceError:未定义lessonData

非常感谢您的帮助!

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

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

2 回答

  • 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;
         }   
       });
    

    编辑你的问题,似乎你有一个拼写错误,就像错误说的那样 .

    将helper语句的返回值更改为 return lessonsData

  • 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 .

相关问题