2015-04-03 37 views
1

我想通过文档的_id直接在流星中检索文档。试图通过_id直接在模板助手中检索文档不工作在流星

这里是我的帮手:

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?这是我收到的错误消息。

Exception in template helper: ReferenceError: lessonData is not defined

非常感谢您的帮助!

已更新的问题引用当前错误并提出了更改。

另外我不能使用铁路由器这个项目,因为我使用的聚合物的某些部分不能很好地使用它。

回答

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

+0

不幸的是我不能使用铁路由器。所以我需要手动获取id并通过url抓取它。有没有办法将字符串格式从网址转换为流星正在寻找_id类型。 – 2015-04-03 16:04:29

+0

uggh ...非常感谢。我没有意识到我的错字。那固定的东西。没有类型问题! – 2015-04-03 16:06:45

0
var lessonsData = Lessons.findOne({_id: id}).fetch(); 

如果使用findOne你不需要使用抓取您直接获得,因此该对象fetch()不是一个函数。

顺便说一句,如果你使用铁路路由器,你可以直接通过Router.current().params.yourparameter而不是使用javascript window.location来获得url的params。

另一个错误是,你有

var lessonsData = Lessons.findOne({_id: id}).fetch(); 
    return lessonData; 

你在第一个以S,而不是返回类型lessonsData。

+0

谢谢,这是一个部分问题。我删除抓取时仍然出现错误。模板助手中的异常:ReferenceError:lessonData未定义。我仍然认为这个问题是由于id被认为是一个字符串,但也许是其他的东西。不幸的是,我不能使用铁路路由器,因为我使用的某些聚合物部件不适合铁路由器。 – 2015-04-03 15:54:45

+0

我改变了我的答案来回答你的第二个错误:)。这是由于错误 – 2015-04-03 15:59:27