没有 ID 的路由页面 - 如何使用另一个字段?
Route page without ID - How to use another field?
我正在尝试访问模型中具有特定字段的特定路由。
示例:
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到的路线:
{{#link-to 'wedding' wedding.pageName}}Access{{/link-to}}
尝试获取记录:
model(params) {
return this.store.query('wedding', { orderBy: 'pageName', equalTo: params.pageName });
}
但是,如何在我的路由模型中获取特定参数 "pageName" 的记录?以及如何在用户直接从URL?
访问页面时获取相同的记录
提前致谢
如果您的非 ID 字段确实非常唯一(即在后端强制执行唯一性),您可以通过编写自定义序列化程序将其用作前端 ID。
export default DS.JSONSerializer.extend({
primaryKey: 'other_unique_key'
});
如果您使用的是 REST 后端,只需将上面代码中的 DS.JSONSerializer
换成 DS.RESTSerializer
。
这将使您能够严格遵循 Ember 的按 ID 处理记录的惯例。您可以阅读有关编写自定义序列化程序的更多信息 here in the Guides。
另一种方法是使用查询参数。在这种情况下,您的 URL 看起来更像 http://example.com/weddings?wedding=romeojuliet
阅读有关查询参数和访问它们的值的更多信息here in the Guides。
可以在此处找到更多详细信息。 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的作用是什么?
And how do I get the same record when the user access the page directly from the URL?
因为你的路由器里有这个。 this.route('wedding', { path: 'wedding/:pageName' });
您已经设置为可以直接在您的 url 中作为 domainname/wedding/pagename
访问它
我正在尝试访问模型中具有特定字段的特定路由。
示例: 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到的路线:
{{#link-to 'wedding' wedding.pageName}}Access{{/link-to}}
尝试获取记录:
model(params) {
return this.store.query('wedding', { orderBy: 'pageName', equalTo: params.pageName });
}
但是,如何在我的路由模型中获取特定参数 "pageName" 的记录?以及如何在用户直接从URL?
访问页面时获取相同的记录提前致谢
如果您的非 ID 字段确实非常唯一(即在后端强制执行唯一性),您可以通过编写自定义序列化程序将其用作前端 ID。
export default DS.JSONSerializer.extend({
primaryKey: 'other_unique_key'
});
如果您使用的是 REST 后端,只需将上面代码中的 DS.JSONSerializer
换成 DS.RESTSerializer
。
这将使您能够严格遵循 Ember 的按 ID 处理记录的惯例。您可以阅读有关编写自定义序列化程序的更多信息 here in the Guides。
另一种方法是使用查询参数。在这种情况下,您的 URL 看起来更像 http://example.com/weddings?wedding=romeojuliet
阅读有关查询参数和访问它们的值的更多信息here in the Guides。
可以在此处找到更多详细信息。 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的作用是什么?
And how do I get the same record when the user access the page directly from the URL?
因为你的路由器里有这个。 this.route('wedding', { path: 'wedding/:pageName' });
您已经设置为可以直接在您的 url 中作为 domainname/wedding/pagename
访问它