我試圖在Ember.js應用程序中實現延遲加載。理想情況下,我寧願將每個模塊的所有相關代碼(包括任何控制器和路由定義)都包含在單獨的.js文件中,該文件將被加載延遲。在Ember.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中的延遲加載的例子我迄今爲止所見到的將路徑放在延遲加載的文件之外。那是唯一的選擇嗎?
另外的路線,延遲加載也將介紹queryParams問題在控制器上。 – jcbvm