ember.js - Ember : setting a controller's property in a route not working

标签 ember.js

我有一个用户模型,并且一个用户有许多“录音”。在用户页面上,我希望能够对用户的录音进行分页。我的路由器如下所示:

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/

相关文章:

javascript - 将 ember-js 升级到 1.12.0 并将 ember-cli 升级到 0 0.2.5 时的缺陷

model - Ember.js:计算所有子模型的属性总和

javascript - 为什么一个空白的 Ember 对象的保留大小约为 500

html - 如何将 handlebars 表达式包装在 span 标签中,并使 span 标签可点击?

ember.js - Uviews 未连接到 Controller

Ember.js:从嵌套路由调用 ApplicationRoute 的操作

如果没有提供,ember.js 显示默认的嵌套路由

javascript - 这是一个 javascript 方法还是属性?

javascript - emberJS 挤压 nwJS require() 方法

ember.js - 我应该如何获取这个输入字段的值?