2015-12-15 68 views
1

不能設置單個項目clickleable鏈接:如何讓pathFor創建基於this.params._id的URL路徑?

router.js:

Router.route('/projects/:_id', { 
    name: 'projectPage', 
    template: 'projectPage', 
    data: function() { 
    return Projects.findOne({ _id: this.params._id }) 
    } 
}) 

project_list.html:

<template name="projectList"> 
    <div class="col-md-10"> 
    <div class="row"> 
     <h2 class="page-header">My Lessons</h2> 
     {{#each projects}} 
     {{> project}} 
     {{/each}} 
    </div> 
    </div> 
</template> 

project.html:

<template name="project"> 
    <div class="col-md-4"> 
    <div class="thumbnail"> 
     <img src="thumb-1.png" alt="..."> 
     <div class="caption"> 
     <h3>{{title}}</h3> 
     <p>{{description}}</p> 
     <p><a href="{{pathFor 'projectPage'}}" class="btn btn-primary" role="button">Check out</a></p> 
     </div> 
    </div> 
    </div> 
</template> 

project_page.html:

<template name="projectPage"> 
    <div class="col-md-10"> 
    <div class="row"> 
     <h2 class="page-header">{{title}}</h2> 
     <h2 class="page-header">{{description}}</h2> 
    </div> 
    </div> 
</template> 

我得到這個奇怪的網址:http://localhost:3000/projects/ObjectID(%22566b810371d07711cf9d6680%22)

而且我帶到projectPage但沒有顯示在所有。

我在做什麼錯?

回答

2

問題是,鐵路由器在您的物品的_id中看到一個ObjectID,它預計會找到String。你可以改用以下,你的對象ID轉換成字符串在即時:

project.html:

<template name="project"> 
    <div class="col-md-4"> 
    <div class="thumbnail"> 
     <img src="thumb-1.png" alt="..."> 
     <div class="caption"> 
     <h3>{{title}}</h3> 
     <p>{{description}}</p> 
     <p><a href="{{pathFor 'projectPage' _id=this._id.toHexString}}" class="btn btn-primary" role="button">Check out</a></p> 
     </div> 
    </div> 
    </div> 
</template> 

但你必須把它轉換回對象ID在你的路線:

router.js:

Router.route('/projects/:_id', { 
    name: 'projectPage', 
    template: 'projectPage', 
    data: function() { 
    return Projects.findOne({ _id: new Meteor.Collection.ObjectID(this.params._id) }) 
    } 
}) 
+0

@SyvainB。工作,謝謝!不知道爲什麼流星發展集團複雜的東西過去很簡單。代碼現在是現在的兩倍。 (儘管如此,仍然熱愛流星) – alexchenco

+0

據我所知,在最新的流星中,使用'String'作爲ID並沒有改變......你很可能以一種「不尋常」的方式插入這些文檔。 (通過mongo shell,通過一個特定的包...)請參閱[這個答案](http://stackoverflow.com/a/27402289/1439597) – SylvainB

+0

哦,我用'流星mongo'和'db.project .insert({text:「Hello world!」,createdAt:new Date()});'那是什麼原因?如果我通過應用程序中的表單正常插入它們,我會像以前一樣獲取字符串嗎? – alexchenco