2014-10-02 60 views
1

我有两个类别:通过铁在URL中显示两个集合:路由器?

var Books = new Meteor.Collection("books"); 
var Chapters = new Meteor.Collection("chapters"); 

Chapter集合有一个名为bookId propetry。所以每章都有一本书,每本书都有很多章节。

这是路由器:

Router.map(function() { 
    this.route("bookList", { 
    path: "/", 
    data: function() { 
     return Books.find({}); 
    } 
    }); 
    this.route("bookPage", { 
    path: "/books/:_id", 
    data: function() { 
     return Books.findOne(this.params._id); 
    } 
    }); 
}); 

所以,现在当我打开一本书,我得到和URL,如:

http://localhost:3000/books/TS23MTKrdpja2tCwq 

但现在我不知道如何修改代码,所以我可以打开一本书的章节,并最终得到一个URL:

http://localhost:3000/books/TS23MTKrdpja2tCwq/chapters/stwtwfd5tsrstfw 

任何想法?

编辑:

章节/ chapter_page.js:

Template.chapterPage.helpers({ 
    chapters: function() { 
    Chapters.find({ 
     bookId: this._id 
    }, { 
     sort: { 
     position: 1 
     } 
    }); 
    } 
}); 

章节/ chapter_item.html:

{{#with chapter}} 
    <h4><a class="open-chapter" href="{{pathFor 'chapterPage'}}">{{title}}</a></h4> 
{{/with}} 

回答

1

你必须定义一个章节路线两个参数。

章节路径中的_id显然引用了该章节,并且bookId属性名称必须与章节集合中的相同,才能工作。

这将允许这样的事情:

{{#with chapter}} 
    {{! 1.0.0-pre2 syntax}} 
    {{pathFor route="chapterPage"}} 
    {{! 0.9.3 syntax}} 
    {{pathFor "chapterPage"}} 
{{/with}} 

自动计算给出一个章节文件章节URL。

鉴于chapter引用了一个章节文档:我们的data函数公开了章节属性,它确实是一个章节文档。

编辑:

chapters可能是错误的,因为this._id可能引用什么都没有(将需要使用像this.chapter.bookIdthis.book._id)。我将这些章作为财产纳入data结果如下:

this.route("chapterPage", { 
    path: "/books/:bookId/chapters/:_id", 
    data: function() { 
    var chapter=Chapters.findOne(this.params._id); 
    var book=Books.findOne(this.params.bookId); 
    var chapters=Chapters.find({ 
     bookId:this.params.bookId 
    },{ 
     sort:{ 
     position:1 
     } 
    }); 
    return { 
     chapter:chapter, 
     book:book, 
     chapters:chapters 
    }; 
    } 
}); 
+0

非常感谢。什么是“someChapter”?我如何做这项工作? – alexchenco 2014-10-02 13:50:14

+0

刚刚做的有什么不同:'{{pathFor'chapterPage'}}'? – alexchenco 2014-10-02 13:56:12

+0

'someChapter'旨在表示引用有效章节文档的任何模板可访问帮助器(带有'_id'和'bookId'设置为正确构造URL)。 '{{pathFor route =“chapterPage”}}'是最新版本'iron:router'的正确语法。编辑我的答案澄清这一点。 – saimeunt 2014-10-02 14:20:41

相关问题