我有一个用户模型,并且一个用户有许多“录音”。在用户页面上,我希望能够对用户的录音进行分页。我的路由器如下所示:
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
最佳答案
这没有按预期工作的原因有些微妙。
问题在于,虽然在 RecordingsController
的单例实例上正确设置了 selectedPage
,但在 recordings
中呈现的实际录音列表code> 模板包装在一个单独的新 RecordingsController
中,其中未设置 selectedPage
。
为什么会发生这种情况?
有两种方法可以在 Handlebars 模板中调用 render
帮助器。如果传递单个参数,命名模板将使用相应的单例 Controller 作为上下文进行渲染。
如果传递两个参数,则命名模板将使用相应 Controller 的新实例来呈现,其内容设置为传递的第二个参数。
因此,您最终会得到两个 RecordingsController
实例:设置 selectedContent
的单例实例,以及设置 recordings
的第二个实例。模板呈现为。
要解决此问题,您需要更改两件事。首先,将渲染调用更改为
{{render 'recordings'}}
其次,显式定义一个UserRoute
,以便您可以在设置新的User
时设置单例RecordingsController
的内容:
App.UserRoute = Em.Route.extend
setupController: (controller, model) ->
@_super controller, model
@controllerFor('recordings').set 'content', model.get('recordings')
关于ember.js - Ember : setting a controller's property in a route not working,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18666851/