在Ember.js中使用{{render}} helper的嵌套控制器的控制器绑定

时间:2014-08-05 15:19:58

标签: javascript ember.js

我在检测嵌套控制器中的属性更改时遇到了麻烦。

这是我的简化代码:

ActionCardController

ActionCardController = Ember.ObjectController.extend ActivatableHandles,

  needs: ['actionCards', 'handle-connector']

HandleConnectorController

HandleConnectorController = Ember.ObjectController.extend
  content: {}

  testProperty: (->
    @get('somePropertyThatChanges')
  ).property('someOtherProperty')

ActionCard模板

<div ...
  ...
  ...
  ...
  {{render 'handle-connector' this}}
  ...
  {{controllers.handle-connector.testProperty}}
</div>

如图所示,我有一个嵌套的&#34;手柄连接器&#34;控制器(具有多个属性),具有自己的视图和模板,需要在ActionCard模板内呈现。在handle-connector上下文中,一切都呈现并表现良好,但我似乎无法访问父控制器中的testProperty(这是嵌套句柄控制器上的计算属性)。我只能访问初始属性值,但一旦在嵌套控制器中更改它,它就不会在父控制器(ActionCard)中刷新。

如果我没有在渲染助手中指定模型,只需调用:

{{render 'handle-connector'}}

...然后该属性也会在父控制器中刷新,这种方法可以正常工作。但是当我渲染多个ActionCard时,我得到错误&#34; 你只能使用{{render}}帮助器一次而不使用模型对象作为其第二个参数&#34; 。处理这种情况的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

needs访问控制器的单例实例,而带模型的render为正在注入的特定模板创建控制器的唯一实例。

您可以使用子控制器中的this.parentController从渲染的控制器访问父控制器,从而为您提供从子级到父级的通信方式。

示例:http://emberjs.jsbin.com/buzud/1/edit