0

ここに私のルートがあります:

this.resource('kb_obj', {path: '/kb/:data_type'}, function() {
  this.resource('kb_obj_show', {path: '/:id'}, function() {
    this.route('with_breadcrumb', {path: '/:breadcrumb'});
  });
  this.resource('kb_filtered_page', {path: '/:filter_params/page/:page_id'}, function() {
    this.route('index', {path: '/'});
  });
});

ご覧のとおり、KbObjRoute の主な役割は、現在のデータ型を格納することです。

私の問題は、誰かが次のようなリンクをクリックしたときです。

{{#linkTo 'kb_obj_show.with_breadcrumb' this this}}{{name}}{{/linkTo}}

modelorメソッドはsetupControllerKbObjRoute で起動されないため、データ型を更新することはなく、その情報に依存するもの (メインのナビゲーション リンクなど) は更新されません。

子ルートで何が起こっているかを親ルートに通知する方法がわかりません。

何か不足していますか?

ありがとう!

4

1 に答える 1

0

ここには2つの誤解があると思います

  1. あなたのサブルートは親ルート上に構築されますが、それを変更しないでください (詳細は以下) おそらく、達成しようとしているものと URL 構造に不一致があります
  2. モデル メソッドは linkTo に対して呼び出されません (linkTo がモデルを提供しているため)。誰かがルートに直接立ち寄ると、呼び出されます

URL/kb/imageは、モデルとして一連の画像をロードする場合があります。 /kb/image/123はそれらの画像の 1 つです。123の data_type を変更しても、バブルアップして動的セグメントが変更されることはありません。

そうは言っても、ルートとコントローラーはいくつかの方法で相互に依存できます。

ルートでは、modelForメソッドを使用できます。あなたの場合、次のようになると思います。

this.modelFor('kb_obj')

コントローラーでは、needs配列を使用します。したがって、別のコントローラーからモデルまたはプロパティを取得したい場合は、次のように実行できます。

App.SubController = Ember.ObjectController.extend({
  needs: "otherController",
  linkedProperty: Ember.computed.alias("controllers.otherController.model.itsProperty")
});
于 2013-11-08T04:50:55.100 に答える