没有ID的路线页面 - 如何使用其他字段?

时间:2017-09-15 14:24:20

标签: ember.js ember-router

我正在尝试访问模型中具有特定字段的特定路线。

实施例: 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访问页面时如何获得相同的记录?

提前致谢

2 个答案:

答案 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

的形式访问它