如何使用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挂钩中指定它.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...