Ember.js 如何从URL确定余烬路由名称?
我需要从URL字符串确定路由名称 这通常是路由器在内部完成的工作,但是由于{在这里插入长条新闻}我需要手动完成。我收到一段API中的数据,看起来像“gallery/123”,我需要知道路由名称是“gallery.post”。这样我就可以做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” 等 在路线中是否始终
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, ...}]