没有 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

访问它