0

我有两个 Ember 应用程序,它们的功能部分重叠,所以我想将公共部分提取到一个单独的模块中。这个提取的模块包含路由、控制器、视图等...... - 所有这些都定义在自己的命名空间中,比方说Shared

Shared = Ember.Namespace.create();

Shared.FooRoute = Ember.Route.extend({ /*...*/ })
Shared.FooController = Ember.Controller.extend({ /*...*/ })

// ...

Shared我的问题是,除了默认命名空间之外,我如何告诉 Ember 在命名空间中查找路由(控制器、视图……)App

App.Router.map(function() {
  this.route("foo"); // <-- how to tell it I want Shared.FooRoute, 
                     //     not App.FooRoute?
})

另外,我不想在任何路由前缀下“挂载”共享路由。我不希望Shared.FooRoute有路径shared/foo,但只有foo

4

1 回答 1

0

我自己想通了。可以通过提供定制的解析器来影响 Ember 解析路由(和其他对象)的方式。这就是我所做的:

App = Ember.Application.create({
  resolver: Ember.DefaultResolver.extend({
    resolveOther: function(parsedName) {
      // try default resolution...
      var result = this._super(parsedName);

      if (result) {
        return result;
      } else if (parsedName.root != Shared) {
        // if it fails, look in the Shared namespace
        parsedName.root = Shared;
        return this.resolveOther(parsedName);
      } else {
        return null;
      }
    }
  })
})
于 2013-04-29T17:44:23.353 回答