2

我有一个用户模型,一个用户有很多“录音”。在用户页面上,我希望能够对用户的录音进行分页。我的路由器是这样的:

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

4

1 回答 1

2

这没有按预期工作的原因有些微妙。

问题是,虽然selectedPage在 的单例实例上正确设置,但RecordingsController在模板中呈现的实际记录列表recordings被包装在一个单独的、未设置的新RecordingsController位置中。selectedPage

为什么会这样?

有两种方法可以render在车把模板中调用帮助程序。如果您传递单个参数,则命名模板将使用相应的单例控制器作为上下文来呈现。

如果您传递两个参数,则命名模板将使用相应控制器的新实例呈现,其内容设置为传递的第二个参数。

所以你最终得到了两个RecordingsController实例:设置的单例实例,以及用于渲染模板selectedContent的第二个实例。recordings

要解决此问题,您需要更改两件事。首先,将您的渲染调用更改为

{{render 'recordings'}}

其次,显式定义 aUserRoute以便您可以在设置RecordingsControllernew 时User设置单例的内容:

App.UserRoute = Em.Route.extend
  setupController: (controller, model) ->
    @_super controller, model
    @controllerFor('recordings').set 'content', model.get('recordings')
于 2013-09-07T07:04:20.883 回答