0

私は1.0.preにいるhttp://emberjs.com/guides/outlets/#toc_transitions-and-urlsのガイドに従って残り火のルーティングを機能させようとしています

ただし、テンプレートバー内でアクションを定義するのに行き詰まっています。

テンプレートバーから[記事を読む]をクリックしようとすると、ルーターを使用するのではなく、ビュー内でshowPost関数を見つけようとすると、エラーが発生します。ターゲットにはどのターゲットを使用する必要がありますか?また、コンテキストを正しく設定していますか?

エラー:アサーションに失敗しました:ターゲット<(Ember.Viewのサブクラス):ember337>にはアクションshowPostがありません

編集:https://github.com/newtonianb/todomvc/tree/master/dependency-examples/emberjs_require で入手可能なエラーのあるプロジェクト

4

1 に答える 1

2

これは、ビューにアクションを送信するコントローラーとルーターがない場合に発生します。ルーターにアクセスして、ビューコントローラーとルーターが存在することを確認できcontrollerますcontroller.target

実際、コードを見ると、手動でコントローラーを作成しているため、ルーターが存在するとは思われません。コントローラは、ルータにイベントを送信できるように、ルータについて知る必要があります。

controller.connectOutlet({
  viewClass: PostsView,
  controller: PostsController.create(), // no target!
  context: context
})

デフォルトでは、Emberは、アプリケーションの初期化時に、このすべてを一緒に配線します。これは、あなたのコントローラーがインスタンス化される場所です。

実際、上記をこのようなものに変更すると、問題が解決するはずです。

controller.connectOutlet({
  viewClass: PostsView,
  controller: router.get('postsController'), // this guy has target
  context: context
})

それでも機能しない場合は、jsfiddleを投稿して、一緒に編集できるようにしてください。

于 2012-09-24T16:47:34.937 に答える