ember Router提供了一个很好的资源分支结构(在我的例子中,内容是嵌套在父页面面板中的资源),例如:
app / \ A B / / \ C D E
但我的问题是,在我的两个页面中,我链接回常见内容,例如A和A页面. B在面板中有内容C:
app / \ A B \ / \ C D
“C”必须有两条不同的路线,因为我希望能够指定mysite.com/A/C与mysite.com/B/C不同 – 两者在面板中都有“C”但周围的页面会与众不同.但是控制器以及在很大程度上C的模板在两个地方是相同的,所以我怎么会有两个不同的路线,共享一个共同的控制器和模板,(和奖励点,我怎么会然后通知模板父母是什么,所以我可以根据它进行微妙的调整?)
解决方法
如果它们大致相同,但略有不同,我会为每条路线创建基础控制器/路径/视图并从中扩展. NameSpacing每条路线略有不同.
App.Router.map(function(){ this.resource('A',function(){ this.resource('AC',function(){ }); }); this.resource('B',function(){ this.resource('BC',function(){ }); ... }); }); App.BaseCRoute = Em.Route.extend({ model: function(){ return { foo: 'bar'}; } }); App.ACRoute = App.BaseCRoute.extend({ // use the same model hook });
然后,控制器和视图的模式继续存在,基类中存在共享逻辑,扩展类中存在唯一逻辑.如果要共享模板,可以定义要在视图中使用的模板,或者在路径的renderTemplate挂钩中指定它.