我需要从URL字符串确定路由名称。
这通常是路由器在内部完成的工作,但由于{insert long story here},我需要手动完成。我从API获得了一个看起来像'gallery / 123'的数据,我需要知道路由名称是'gallery.post'。这样我就可以route.replaceWith(determinedRouteName);
答案 0 :(得分:0)
Ember在内部依赖于router-recognizer micro lib。我认为你最好的选择就是使用它。
不幸的是,访问路由器实例当前需要依赖私有-routing
服务。 (注意:这是关于提供公共路由器服务的pending RFC)。
注册此私人服务:
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, ...}]
希望有所帮助
答案 1 :(得分:-1)
您是否总是在路线中只有一个身份证?或者,第一个ID始终是' post'身份证号码至少?如果是这样的话,这不是一个真正的Ember问题,它只是一个JavaScript查找/替换,它始终遵循相同的格式,假设API数据总是以相同的格式返回。
假设API始终提供以下格式:
"东西/的:POST_ID 强> / optionally_something_else"
您可以获取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