【发布时间】:2014-12-21 05:06:19
【问题描述】:
我正在尝试在 Ember.js 应用程序中实现延迟加载。理想情况下,我希望将每个模块的所有相关代码(包括任何控制器和路由定义)放在一个单独的 .js 文件中,该文件会延迟加载。
现在,当我转换到路由时,js 文件会正确加载,但是因为 Ember 隐式生成路由定义,所以使用隐式生成的路由对象而不是我延迟加载的 js 文件中的路由。
在我延迟加载的 js 文件中,我有一个路由 App.UsersManagerRoute 应该链接到 users.manager 路由。在 Ember Inspector 中,我可以看到正在使用隐式生成的路由,即使在我加载了 js 文件之后也是如此。
为了解决这个问题,我尝试在加载 js 文件后手动注册路由,但它似乎不起作用。这是我执行延迟加载的代码:
Ember.Router.reopen({
_doTransition: function (_targetRouteName, models, _queryParams) {
var resourceName = _targetRouteName.split('.')[0];
var self = this;
var transition = self._super(_targetRouteName, models, _queryParams);
transition.abort();
var fullRouteName = 'route:' + camelizeRouteName(_targetRouteName);
self.container.unregister(fullRouteName);
App.lazyLoad(resourceName, function() {
self.container.register(fullRouteName, App[sentenceCasedRouteName(_targetRouteName) + 'Route']);
transition.retry();
});
return transition;
}
});
在我取消注册隐式生成的路由并注册我的延迟加载路由后,路由定义似乎使用正确,但由于某种原因,我看到一个空白页面而不是正确的模板。我不太确定我在这里缺少什么,或者我正在尝试做的是推荐的方法。
到目前为止,我在 Ember 中看到的所有延迟加载示例都将 Route 放置在延迟加载文件之外。这是唯一可行的选择吗?
【问题讨论】:
-
除了路由,延迟加载也会给控制器上的queryParams带来问题。
标签: ember.js