我有一個一對多的關係的兩個流星集合:建築物和公共場所流星鐵路由器嵌套路線
在我的建築頁,我想表明有關建築物的空間。
現在,我就是這麼做的:
buildingsRoute.coffee
BuildingController = RouteController.extend(template: "buildings")
Router.map ->
@route "building",
path: "/buildings/:_id"
waitOn: ->
subs.subscribe "allBuildings"
subs.subscribe "allSpaces"
data: ->
building: Buildings.findOne(@params._id)
spaces: Spaces.find({building_id: @params._id})
building.jade:
template(name="building")
+with building
.building
.page-header.position-relative
h1.inline #{name}
.row
.col-xs-12
+spacesList
template(name="spacesList")
.widgets
.row
h1 Spaces
+each spaces
.col-xs-12.col-sm-6
.widget-box.widget-color-purple
.widget-header
a(href="{{pathFor 'space'}}") #{name}
.widget-body
p Content here
這並不爲這樣的工作,我猜是因爲spacesList模板的數據上下文與鐵路路由器爲建築定義的不一樣。
我可以用「+ each ../spaces」替換「+ each spaces」,但這對我來說似乎不是一個非常通用的解決方案(如果我想在另一個上下文中使用我的spaceslist模板,該怎麼辦?)
於是,我就這樣定義模板傭工的數據上下文:
Template.spacesList.helpers
spaces: Spaces.find({building_id: @params._id})
但我得到的錯誤信息:
Spaces is not defined.
所以我有點糊塗了。什麼是流星的方式來正確實施嵌套路線?
謝謝!
編輯:
空間集合的定義:/models/space.coffee
@Spaces = new Meteor.Collection("spaces",
schema:
building_id:
type: String
label: "building_id"
max: 50
name:
type: String
label: "Name"
optional: true
max: 50
creation_date:
type: Date
label: "Creation date"
defaultValue: new Date()
)
出版物:/server/publications.coffee
# Buildings
Meteor.publish "allBuildings", ->
Buildings.find()
Meteor.publish "todayBuildings", ->
Buildings.find creation_date:
$gte: moment().startOf("day").toDate()
$lt: moment().add("days", 1).toDate()
# Publish a single item
Meteor.publish "singleBuilding", (id) ->
Buildings.find id
# Spaces
# Publish all items
Meteor.publish "allSpaces", ->
Spaces.find()
EDIT 2
後一些研究,我終於想出了一個解決方案:
Template.spacesList.helpers
spaces:() ->
if Router._currentController.params._id
subs.subscribe "buildingSpaces", Router._currentController.params._id
Spaces.find()
else
subs.subscribe "allBuildings"
Spaces.find()
nbr_spaces:() ->
Spaces.find().count()
有了一個額外的刊物:
# Publish all items for building
Meteor.publish "buildingSpaces", (building_id) ->
Spaces.find({building_id: building_id})
的錯誤是:
- 一個事實,即空間的定義並沒有裹成一個功能
- 的@ params._id那我取而代之的不是很性感的Router._currentController.params._id,但我找不到任何快捷方式。
我仍然不知道這是否是流星(最好)的方式來管理嵌套的路線......
任何更好的建議?
請註明'Spaces'收集的定義和文件路徑(如:'/ lib目錄/收藏/ spaces.coffee') 。另請注意,翡翠中的'+'用於嵌套模板和自定義組件。你應該從'each',''等''中刪除它們,我甚至感到驚訝,即使編譯。 –
我將它們添加到我的文章的末尾。關於每一個,如果等等,它們實際上是組件。即使它是可選的(https://github.com/mquandalle/meteor-jade/),它們也應該與+一起使用。這就是編譯的原因。 – ndemoreau
啊,是的,你對+的完全正確,我想我只是略過了那部分文檔。 –