我有以下控制器,我想使用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(路由,模型);
答案 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);