微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用ember.js路由器表示“图形”(非树)结构?

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挂钩中指定它.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐