来自其他控制器的绑定控制器不在rc8中工作

时间:2013-08-29 23:03:44

标签: ember.js

在Ember rc6中,我成功地将控制器JobsTableColumnsController绑定到控制器columns内的属性JobsTableController。将创建JobsTableColumnsController并自动绑定到columns属性。

以下是在rc6中运行的代码:

App.JobsTableRoute = Ember.Route.extend
  model: -> App.Job.all()
  setupController: (ctlr, model) -> ctlr.set('content', model)

App.JobsTableController = App.TableController.extend  
  needs: ['jobsTableColumns']
  columnsBinding: 'controllers.jobsTableColumns'

App.JobsTableColumnsController = App.ColumnsController.extend
  content: Em.A([
    App.ColumnDefinition.create(name: 'Id')
    App.ColumnDefinition.create(name: 'Description')
  ])

在rc8中,我必须在路由器中明确地将JobsTableColumnsController设置为JobsTableController.columns属性,如下所示:

App.JobsTableRoute = Ember.Route.extend
  model: -> App.Job.all()
  setupController: (ctlr, model) -> 
    columns = @controllerFor('jobsTableColumns')
    ctlr.set('columns', columns)
    ctlr.set('content', model)

这是一个错误,还是我需要使用needs属性更改将控制器绑定到属性的策略。

1 个答案:

答案 0 :(得分:1)

  

这是一个错误,还是我需要使用needs属性更改将控制器绑定到属性的策略。

不,这不是一个错误,somePropertyBinding的使用是悄悄地,不赞成使用计算属性。如需参考,请参阅Peter Wagenet的评论:https://github.com/emberjs/ember.js/issues/1164#issuecomment-23200023

至于新策略,您应该使用Ember.computed.alias

实施例

App.JobsTableController = App.TableController.extend  
  needs: ['jobsTableColumns']
  columns: Ember.computed.alias('controllers.jobsTableColumns')

这样您就不需要JobsTableRoute setupController挂钩中的额外工作。

希望它有所帮助。