New Router API 中的路由和资源有啥区别?

Posted

技术标签:

【中文标题】New Router API 中的路由和资源有啥区别?【英文标题】:What is the difference between a route and resource in New Router API?New Router API 中的路由和资源有什么区别? 【发布时间】:2013-02-05 01:59:03 【问题描述】:

我想了解RouteResource 之间的区别。我理解Resource 的方式有助于将Route 对象的子路径设置为另一个Route 对象。但是当我想到路径也发生默认名称映射时,它还不清楚。

【问题讨论】:

【参考方案1】:

请注意,从 1.11.0 开始,this.route 仅用于代替 this.resource。来源:http://guides.emberjs.com/v1.11.0/routing/defining-your-routes/*

请查看此post 以获得详细说明。

这是对这篇文章的粗略总结(我做了一点修改):

自从改变资源和路线后,很多人 对两者的含义以及它们如何影响命名感到困惑。 区别如下:

资源 - 事物(模型) 路线 - 与事物有关的事情

这意味着使用路由和资源的路由器可能如下所示:

App.Router.map(function() 
  this.resource("posts",  path: "/" , function() 
    this.route("new",  path: "/new" );
  );
  this.route("another",  path: "/another" );
);

这将导致创建/使用以下路由:

PostsRou​​te、PostsController、PostsView PostsIndexRoute、PostsIndexController、PostsIndexView PostsNewRoute、PostsNewController、PostsNewView 另一个路由,另一个控制器,另一个视图

正如我们从这个例子中看到的,资源会影响正在使用/创建的控制器、路由和视图的命名(“新”路由被视为从属于“帖子”资源)。引用原始来源(我对其进行了修改,因为正如 Patrick M 在 cmets 中正确指出的那样,这很烦人):

这意味着每当您创建资源时,它都会创建一个全新的资源 命名空间。该命名空间以 资源和所有子路由都将插入其中。

更新:更复杂的嵌套资源示例

考虑以下具有多个嵌套资源的更复杂示例:

App.Router.map(function() 
  this.resource("posts",  path: "/" , function() 
    this.route("new",  path: "/new" );
    this.resource("comments",  path: "/comments" , function() 
      this.route("new",  path: "/new" );
    );
  );
  this.route("another",  path: "/another" );
);

在这种情况下,资源comments 创建了一个全新的命名空间。这意味着在这种情况下生成的路由将如下所示。 如您所见,cmets 资源的 Route、Controller 和 View 没有以父路由的名称为前缀。这意味着将资源嵌套在另一个资源中会重置命名空间(= 创建一个新的命名空间) .

PostsRou​​te、PostsController、PostsView PostsIndexRoute、PostsIndexController、PostsIndexView PostsNewRoute、PostsNewController、PostsNewView CommentsRou​​te、CommentsController、CommentsView CommentsNewRoute、CommentsNewController、CommentsNewView 另一个路由,另一个控制器,另一个视图

Ember Docs 中也解释了此行为。

【讨论】:

这在 Ember 指南中应该更清楚。一开始我肯定被这个概念弄糊涂了。 一篇优秀文章的优秀总结。但是您包含的最后一句话没有意义:That namespace will have an " which [...]" 是什么意思?它只是 Route 的占位符吗?控制器 |查看? 嘿帕特里克,感谢您指出这一点。我再也想不通了。因此,我添加了更复杂的嵌套资源示例。我认为这个引用指的是这种情况。 这样就清楚多了。感谢您提供额外的示例,mavilein。 你能详细说明你的例子和这个有什么区别(如果有的话):App.Router.map(function() this.route("posts", path: "/" , function() this.route("new"); this.route("comments", function() this.route("new"); ); ); this.route("another", path: "/another" ); );

以上是关于New Router API 中的路由和资源有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

无线路由器ap模式和router模式有啥区别

“express.Router”和使用“app.get”的路由有啥区别?

router和router switch有啥区别

react路由器中的hashHistory和browserHistory有啥区别?

React Router v4 路由器类型之间有啥区别?

vue中,既然<router-view>可以显示同级路由,子路由有啥意义?