2014-01-25 111 views
2

我在主應用程序「shell」中有兩個不同的應用程序。使用多個子應用程序路由單個頁面應用程序

主應用程序處理登錄幷包含子應用程序的插座,例如,

<header> 
{{outlet}} 
<footer> 

子應用只是標準燼應用與自己的命名空間,路線等

我希望能夠把它們綁在一起這樣

MainApp.Router.map(function() { 
    this.route("login"); 
    this.route("sub1", SubApp1.Router); 
    this.route("sub2", SubApp2.Router); 
}); 

/login -> MainApp.LoginRoute 
/sub1/foo -> SubApp1.FooRoute 
/sub2/foo/bar -> SubApp2.FooBarRoute 

這是可能的?

回答

0

這是一個有趣的想法,但嵌套應用程序不支持這種方式。一次只能使用1個路由器。您可以執行一個應用程序並共享您的路由器,但您必須確保所有內容都位於相同的命名空間中,或者使用某種類型的依賴注入來確保所有依賴項都可用。

SubApp1.MyRouting = function() { 
    this.route("foo"); 
} 

SubApp2.MyRouting = function() { 
    this.route("bar"); 
} 

在MainApp

MainApp.Router.map(function() { 
    this.route("login"); 
    this.route("sub1", SubApp1.MyRouting); 
    this.route("sub2", SubApp2.MyRouting); 
}); 

如果SubApp是單獨的,獨自在一個頁面

SubApp1.Router.map(SubApp1.MyRouting); 
+0

我真的想不同的命名空間。我可以使用mixin將SubApp1和SubApp2名稱空間包含到主名稱空間中嗎?我不需要處理命名衝突。 – dwickern

+0

路由器的命名空間(以及其他一些東西)遠未定義(https://github.com/emberjs/ember.js/pull/1925)。此外,容器會根據當前名稱空間查找,但如果有斜槓'namespace2/main',則會根據不同的名稱空間進行查找。不幸的是,沒有用於指定哪些命名空間用於Ember中的每個部分(例如路由器)的鉤子。 – Kingpin2k

+0

爲了組織起見,我最終使用了一個單一的路由器,併爲'SubApp1 = SubApp2 = MainApp = Ember.Application.create()'這樣的名稱空間進行別名。 – dwickern

相關問題