0

アプリでレンダー コントローラーを広範囲に使用していますが、コントローラーの作成に関するロジックを理解するのに問題があります。

問題のコードは、この (カットダウンされた) テンプレートを使用します (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 をレンダー呼び出しの 2 番目のパラメーターとして渡します。

問題は、 setupController メソッドnoticesでテンプレートをレンダリングすると、別のコントローラーが表示されることです。Parentつまり、それらは異なる ember ID を持っています。のコントローラー@set('controller.controllers.notices.showAdd', true)は、テンプレートによってレンダリングされるものとは異なります。

テンプレートからモデルを削除してstudent.room.notices「render "notices"」を使用すると、同じコントローラーが使用され、showAdd プロパティを設定してテンプレートに表示できます。問題は、モデルが含まれていないことです。

関連するドキュメントは、レンダー ビュー ヘルパーがそうすると言いますがGet (or generate) the singleton instance of AuthorController、これは私には当てはまらないようです。

誰でもこの動作に光を当てることができますか?

ありがとう、

マーティン

4

1 に答える 1

0

プロパティバインディングを使用する必要があると思います。

NoticesController で: showAdd: Ember.computed.alias('parentController.noticesShowAdd'

setupController で: controller.set('noticesShowAdd', true)

そうすれば、notices コントローラーへの参照を取得する方法を考え出すことを心配する必要はありません。

targetrender が each 内で呼び出される場合は、代わりにを使用する必要がある場合があることに注意してくださいparentController

于 2013-08-31T09:01:03.253 に答える