ember.js - 如何在初始化程序中获取 Router 实例

标签 ember.js ember-cli ember-router

我有一个用例,我想在初始化程序中动态注册路由。 因为该应用程序是一个自定义应用程序,所以我不知道开发时的路线。

目前我创建了一个实例初始化程序:

import Ember from 'ember';
const myTempRouteList = ['home']; // this is retrieved from the backend

export function initialize(instance) {
  let container = instance.container;
  let router = container.lookup('router:main');

  myTempRouteList.forEach(function (name) {
    let routeName = name.dasherize();

    router.map(function(){ // router.map is undefined here
      this.resource(routeName, {path: routeName});
    });
    container.register(`route:${routeName}`, Ember.Route.extend({
    }));

  }, this);
}

export default {
  name: 'register-routes',
  initialize: initialize
};

问题是路由器实例存在,但没有方法 map。在 documentation它被描述为公共(public)方法。我检查过的其他一些方法还存在,例如有路由

最佳答案

事实证明,我必须调用容器上的 lookupFactory 方法而不是 lookup 方法。

export function initialize(instance) {
  let container = instance.container;
  let router = container.lookupFactory('router:main');

  ...
}

关于ember.js - 如何在初始化程序中获取 Router 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31647559/

相关文章:

javascript - 每个 EmberApp 的单独 index.html 文件

ember.js - 在初始化时将 Controller 注入(inject) Controller 不再起作用(金丝雀)

ember.js - 将 LoDash 与 EmberCLI 一起使用

javascript - Ember.js pre4 路由器获取其他 Controller

eclipse - Handlebars js 编辑器。

ember.js - 处理来自引导插件通知组件的 ember 操作

javascript - BroccoliMergeTrees (TreeMerger (lint)) : Expected Broccoli node, 获得 inputNodes[1] 的 [object Object]

javascript - 控制台上出现 "[Report Only] Refused to load the font..."错误消息

javascript - 加载完成后删除 renderTemplate ember 路由中的模板

javascript - 如何从 Ember 中的路由访问 Controller ?