提问者:小点点

渲染助手和控制器实例化


我在我的应用程序中广泛使用渲染控制器,并且无法理解有关控制器创建的逻辑。

有问题的代码使用这个(剪切)模板(使用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观察控制器的内容,因此我不会将任何模型传递给模板中的渲染调用。

使用通知控制器,我传入student.room。通知作为渲染调用的第二个参数。

现在的问题是,当我将模板渲染到setupController方法中时,我看到了不同的通知控制器。也就是说,它们有不同的余烬ID。@set('控制.控制.注意. showAdd',true)处的控制器与模板渲染的控制器不同。

如果我从模板中删除student.room。通知模型,只使用“渲染”通知,那么使用相同的控制器,我可以设置showAdd属性并将其显示在模板中。问题是它不包含任何模型。

相关文档说渲染视图助手将获取(或生成)AuthorController的单例实例,但对我来说似乎不是这样。

有人能解释一下这种行为吗?

谢谢,

马丁


共1个答案

匿名用户

我认为您应该使用属性绑定。

在NoticesController中:showAdd:Ember. com puted.alias('在NoticesController中。

在setupController中:控制器. set('注意显示添加',true)

然后,您不必担心如何获取对通知控制器的引用。

请注意,如果在each中调用渲染,您可能需要使用target而不是父母控制器