我有一个用户模型,用户有很多'录音'。在用户页面上,我希望能够对用户的录音进行分页。我的路由器看起来像这样:
App.Router.map ->
@.resource 'user', path: '/:user_id', ->
@.route 'page', path: '/page/:page_id'
我想像这样在UserPageRoute中设置selectedPage属性(为了简单起见,页码是硬编码的):
App.UserPageRoute = Ember.Route.extend
setupController: ->
@.controllerFor('recordings').set('selectedPage', 3)
这似乎有效。我可以在调试路由代码时检查属性,并且属性似乎已设置:
@.controllerFor('recordings').get('selectedPage') => 3
如果我直接访问用户页面(/ user / 25 / page / 3)并调试RecordingsController,则不再设置selectedPage。
@.get('selectedPage') => undefined
这是一个说明问题的jsbin : http://jsbin.com/owudUgI/20/edit
答案 0 :(得分:2)
这不能按预期工作的原因有点微妙。
问题是,在selectedPage
的单例实例上正确设置RecordingsController
时,recordings
模板中呈现的实际记录列表将单独包装,新的RecordingsController
,其中selectedPage
未设置。
为什么会这样?
有两种方法可以在把手模板中调用render
助手。如果传递单个参数,则将使用相应的单例控制器作为上下文来呈现命名模板。
如果传递两个参数,则使用相应控制器的新实例呈现命名模板,并将其内容设置为传递的第二个参数。
所以你最终得到了两个RecordingsController
个实例:selectedContent
设置的单例实例,以及recordings
模板的第二个实例。
要解决此问题,您需要更改两件事。首先,将渲染调用更改为
{{render 'recordings'}}
其次,明确定义UserRoute
,以便您可以在设置新的RecordingsController
时设置单身User
的内容:
App.UserRoute = Em.Route.extend
setupController: (controller, model) ->
@_super controller, model
@controllerFor('recordings').set 'content', model.get('recordings')