私は EmberJS v1.0.0-rc.2 と requireJS を使用しています。
私のアプリの構造はそのようなものです。
- app
- - moduleA
私のメインファイル:
#app/main.js
var App = Ember.Application.create({
VERSION: '1.0',
//Log router transitions:
LOG_TRANSITIONS: true
});
App.Router.map(function() {
AppRouting.call(this);
});
App = AppRoutingExtend(App);
App.initialize();
関数 AppRouting() および AppRoutingExtend() は、仲間のファイルで見つけることができます。
#app/routing.js
function AppRouting() {
this.resource('root', {path: '/'}, function() {
this.resource('moduleA', {path: '/'}, function() {
ModuleARouting.call(this);
});
});
}
function AppRoutingExtend(App) {
var ModuleARouting = ModuleARoutingExtend();
//Check if ModuleARouting is not empty
if (!Ember.isEmpty(ModuleARouting)) {
$.each(ModuleARouting, function(key, value) {
//Check if key is a string of only letters
// And if value is like Ember.Route.extend({})
if (typeof key === 'string' && /^[a-zA-Z]+$/.test(key)
&& value.toString() == '(subclass of Ember.Route)') {
eval("App.Root" + "ModuleA" + key + "Route = value");
} else {
//Throw error
}
});
}
return App;
}
関数 ModuleARouting() および ModuleARoutingExtend() は、次のファイルで見つけることができます。
#app/moduleA/routing.js
function ModuleARouting() {
this.route("contributors", {path: "/"});
this.resource('aContributor', {path: "/:githubUserName"}, function() {
this.route("details", {path: "/"});
this.route("repos", {path: "/repos"});
});
}
function ModuleARoutingExtend() {
var routes = {};
routes['Contributors'] = Ember.Route.extend({
/*
Some Code
*/
});
routes['AContributor'] = Ember.Route.extend({
/*
Some Code
*/
});
routes['AContributorDetails'] = Ember.Route.extend({
/*
Some Code
*/
});
routes['AContributorRepos'] = Ember.Route.extend({
/*
Some Code
*/
});
return routes;
}
新しいモジュールを追加するかモジュールを削除することで、ルーティング パスをアプリケーションに動的に追加できるように作成AppRouting()
しました。ModuleARouting()
このようにして、各モジュールはインターン構造を持ち、AppRouting()
それらをマージすることができます。
ModuleARoutingExtend()
ただし、具体的にはわかりませんAppRoutingExtend()
。最後の例では、 のようにルートを変更しようとしていApp.RootModuleAContributorsRoute
ます。ちなみに、どのルートが によって作成されたのか直接の情報を持っていModuleARouting.call(this)
ないため、変数の名前を知ることはできませんRootModuleAContributorsRoute
。これが、'Contributors'ModuleARoutingExtend()
とその値 Ember.Route.extend({/* some code *});から取得することで eval を動的に使用する理由です。
だから、私の質問は次のとおりです。アプリケーションにいくつかのルートを動的に追加し、それらの構成を取得するより良い方法はありますか? そうでない場合、それはまだ良い方法ですか?