Ember.js 如何从URL确定余烬路由名称?

Ember.js 如何从URL确定余烬路由名称?,ember.js,Ember.js,我需要从URL字符串确定路由名称 这通常是路由器在内部完成的工作,但是由于{在这里插入长条新闻}我需要手动完成。我收到一段API中的数据,看起来像“gallery/123”,我需要知道路由名称是“gallery.post”。这样我就可以做route.replaceWith(determinedRouteName) 需要将“gallery/123”转换为“gallery.post” 需要将“stuff/99/comments”转换为“stuff.post.comments” 等 在路线中是否始终

我需要从URL字符串确定路由名称

这通常是路由器在内部完成的工作,但是由于{在这里插入长条新闻}我需要手动完成。我收到一段API中的数据,看起来像“gallery/123”,我需要知道路由名称是“gallery.post”。这样我就可以做
route.replaceWith(determinedRouteName)

  • 需要将“gallery/123”转换为“gallery.post”
  • 需要将“stuff/99/comments”转换为“stuff.post.comments”

在路线中是否始终只有一个ID?或者第一个ID至少总是“post”ID?如果是这样的话,这不是一个真正的余烬问题,它只是一个JavaScript查找/替换,始终遵循相同的格式,假设API数据总是以相同的格式返回

假设API始终提供此格式:

“something/:post\u id/可选地\u something\u other”

您可以获取API提供的字符串,并通过几个替换方法运行它:

var apiString = "stuff/99/comments";

apiString = apiString.replace(/[0-9]+/, "post").replace(/\//g, "."); // => "stuff.post.comments"

// Also works with:

var apiString = "gallery/123";

apiString = apiString.replace(/[0-9]+/, "post").replace(/\//g, "."); // => "gallery.post"

免责声明:这非常讨厌,如果字符串不遵循此格式,它将被破坏。它还将仅将第一组数字转换为“post”。但是,像往常一样,如果必须使用它:P

余烬依赖于内部。我认为你最好的选择是也使用它

不幸的是,访问路由器实例目前需要依赖私有的
-路由
服务。(注意:下面是一个关于提供公共路由器服务的示例)

注入此私人服务:

import Ember from 'ember';

export default Ember.Route.extend({
  router: Ember.inject.service('-routing'),

  ...
});
recognize
函数返回所有处理程序的列表,如果要生成完整的字符串或任何其他内容,可以加入这些处理程序

例:

希望能有帮助

this.router.recognize("stuffs/99/comments");
> [{handler: "application", ...}, 
    handler: "stuffs", ...}, 
    handler: "stuff", ...}, 
    handler: "comments", ...}, 
    handler: "comments.index, ...}]