我有两个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
。
答案 0 :(得分:0)
我自己想通了。人们可以通过提供自定义的resolver来影响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;
}
}
})
})