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('target').get('router')

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

...另一个小更新

如果我这样做(完全成熟),它似乎会修改 window.location 但我在路线上的模型/设置控制器钩子永远不会被击中

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

4

1 回答 1

3

我认为, 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 回答