1

次のコントローラーがあり、send を使用してイベントをバブルアップしたい

App.PersonController = Ember.ObjectController.extend({
  page: function(page) {
    var model = PersonApp.Page.create({id: page});
    this.send("person.page", model); //should bubble up ...
  }
});

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

PersonApp.Router.map(function(match) {
    this.resource("person", { path: "/" }, function() {
        this.route("page", { path: "/page/:page_id" });
    }); 
}); 

これが単純なページモデルです(基本的にシム)

PersonApp.Page = Ember.Object.extend({                                                                                                 
});

ルート「person.page」を使用していて、有効なモデルを渡していますが、次のエラーが発生します (ルーターにこのルートがないように見えますか?)

キャッチされていないエラー: イベント 'person.page' を処理したものはありません。

コントローラーとルーターの関係をデバッグするのに役立つ場合は、 this.get('target') をダンプすると、コントローラー内で気づきました ...

_debugContainerKey: "ルーター:メイン"

さらに掘り下げて...これを印刷すると

this.get('ターゲット').get('ルーター')

currentHandlerInfos 配列の下にルートを含むルーターが表示されます...これほど深くする必要があるかどうかはわかりませんが

...別のわずかな更新

これを行うと(完全に)、window.location が変更されたように見えますが、ルート上のモデル/setupController フックがヒットすることはありません。

this.get('target').get('router').transitionTo(route, model);

4

1 に答える 1

3

send はルートのイベントに使用されるだけだと思います。コントローラーが send を次のように呼び出すと仮定します。

//in the controller
this.send("personPage", model);

// a matching Route
App.PersonRoute = Ember.Route.extend({
  events : {
    personPage : function(page){
      // this should be called 
    }
  }
});

あなたの場合、transitionTo を活用する必要があります (ルーター プロパティへのアクセスが多すぎると思います。Ember.Router のルーター インスタンスには、再びルーター プロパティがあります。かなり混乱します :-))。

this.get("target").transitionTo("person.page", model);
于 2013-02-22T09:42:10.140 に答える