【问题标题】:How to manually invoke a route in ember.js RC1如何在 ember.js RC1 中手动调用路由
【发布时间】:2013-02-07 13:19:22
【问题描述】:

我有以下控制器,我想使用 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”。

如果它有助于调试我在控制器内部发现的控制器/路由器关系,如果我转储 this.get('target') ...

_debugContainerKey: "router:main"

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

this.get('target').get('router')

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

...另一个小更新

如果我这样做(完全成熟),它似乎会修改 window.location 但我的路由上的模型/setupController 钩子永远不会被命中

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

【问题讨论】:

    标签: ember.js


    【解决方案1】:

    我认为,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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-07
      相关资源
      最近更新 更多