如何在ember.js RC1中手动调用路由

时间:2013-02-22 01:34:50

标签: ember.js

我有以下控制器,我想使用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" });
    }); 
}); 

这里是简单的页面模型(基本上是shim)

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

虽然我正在使用路线“person.page”并且我正在传递一个有效的模型但是我得到以下错误(看似路由器没有这条路线?)

未捕获错误:没有处理事件'person.page'。

如果它有助于调试控制器/路由器关系,我注意到我在控制器内部转储了这个.get('target')......

  

_debugContainerKey:“router:main”

如果我进一步挖掘......并打印这个

this.get( '目标')。得到( '路由器')

我在currentHandlerInfos数组下看到一个带路由的路由器......不确定我是否应该这么深呢

......另一个小小的更新

如果我这样做(完全爆炸)它似乎修改了window.location但我的模型/ setupController钩子在路线上从未被击中

this.get('target')。get('router')。transition(路由,模型);

1 个答案:

答案 0 :(得分: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);