我在我的应用程序中广泛使用渲染控制器,并且无法理解控制器创建的逻辑。
有问题的代码使用此(缩减)模板(使用emblem.js):
.span4
render "learningNeeds" # models loaded in learningNeeds controller
.span8
render "notices" student.room.notices # student is defined on the top-level controller
render "observations" # models loaded in observations controller
和模板路由的setupController:
App.ParentRoute = Ember.Route.extend
setupController: (controller, model) ->
console.log "ParentRoute setupController"
controller.set('student', model.get('students').objectAt(0))
@set('controller.controllers.observations.showFilters', true) # this works
@set('controller.controllers.learning_needs.showFilters', true) # this works
@set('controller.controllers.notices.showAdd', true) # this doesn't work
App.currentUser = model
我在各自控制器中的观察者中设置learning_needs
和observations
个控制器的内容,所以我不会将任何模型传递给模板中的渲染调用。
使用通知控制器,我将student.room.notices作为渲染调用的第二个参数传递。
现在的问题是,当我将模板渲染到notices
setupController方法中的模板时,我看到了不同的Parent
控制器。也就是说,他们有不同的余烬。 @set('controller.controllers.notices.showAdd', true)
处的控制器与模板呈现的控制器不同。
如果我从模板中删除student.room.notices
模型并只使用“渲染”通知“然后使用相同的控制器,我可以设置showAdd属性并将其显示在模板中。那么问题是它不包含任何模型。
相关的docs表示渲染视图助手会Get (or generate) the singleton instance of AuthorController
,但对我来说似乎不是这样。
任何人都可以对这种行为有所了解吗?
感谢,
马丁
答案 0 :(得分:0)
我认为你应该使用属性绑定。
在NoticesController中:
showAdd: Ember.computed.alias('parentController.noticesShowAdd'
在setupController中:
controller.set('noticesShowAdd', true)
然后您不必担心如何获取对通知控制器的引用。
注意,如果在每个内部调用render,则可能需要使用target
而不是parentController
。