我正在尝试访问模型中具有特定字段的特定路线。
实施例: www.myPage.com/wedding/couple1 www.myPage.com/wedding/couple2
我在Ember社区中找到的所有示例都使用ID,但我尝试使用另一个(我将确保它是唯一的)。
我的路线配置:
Router.map(function() {
this.route('create-wedding');
this.route('weddings');
this.route('wedding', { path: 'wedding/:pageName' });
});
我的路线链接:
{{#link-to 'wedding' wedding.pageName}}Access{{/link-to}}
尝试获取记录:
model(params) {
return this.store.query('wedding', { orderBy: 'pageName', equalTo: params.pageName });
}
但是,如何获取特定参数的记录" pageName"在我的路线模型?以及当用户直接从URL访问页面时如何获得相同的记录?
提前致谢
答案 0 :(得分:0)
如果您的非id字段确实是真正独特的(即后端强制执行唯一性),您可以通过编写自定义序列化程序将其用作前端ID。
DS.JSONSerializer
如果您使用的是REST后端,只需在上面的代码中替换DS.RESTSerializer
http://example.com/weddings?wedding=romeojuliet
。
这将允许您密切关注Ember的惯例,以便通过id进行记录处理。您可以阅读有关创作自定义序列化程序here in the Guides的更多信息。
另一种方法是使用查询参数。在这种情况下,您的网址看起来更像{{1}}
详细了解查询参数并访问其值here in the Guides。
答案 1 :(得分:0)
更多细节可以在这里找到。 https://guides.emberjs.com/v2.15.0/models/finding-records/
此行有效return this.store.query('wedding', { orderBy: 'pageName', equalTo: params.pageName });
您需要在API上设置将使用这些参数的过滤器。
您还可以序列化新ID,或设置API以使用slug而不是ID。在这种情况下,你可以像这样直接找到。 return this.get('store').findRecord('wedding', params.pageParam)
从技术上讲,在单个记录的情况下,您应该使用queryRecord而不是查询。
如果它是单个记录,orderBy的目的是什么?
当用户直接从URL访问页面时,如何获得相同的记录?
因为你的路由器中有这个。 this.route('wedding', { path: 'wedding/:pageName' });
您已设置为直接在您的网址中以domainname / wedding / pagename
的形式访问它