javascript - Ember - 通过商店或新的 ajax 调用手动链接到另一个模型

标签 javascript ember.js ember-data ember-cli

这里是 Ember 新手...

// working with
Ember      : 1.13.6
Ember Data : 1.13.7

__

/api/locations

{
  "locations":[
   {
      "id":"1",
      "uri":"/location/1",
      "name":"ATLANTA"
   },
   {
      "id":"2",
      "uri":"/location/2",
      "name":"NORTH VIRGINIA"
   }
 ]
}

__

/api/hosts/1/show

{
  "id": 1,
  "active": true,
  "location_uri": "/location/1"
}

单个主机包含对位置的引用,但在查看主机信息时我没有位置 ID,只有“location_uri”,我希望我可以使用它来手动查找此记录,并且显示主机显示页面时包含在模型中。

enter image description here ......我想显示位置的名称而不是此 uri,并且我想将其链接回主机显示页面的实际位置。我需要一些如何做到这一点的想法?

我想了解如何在我的商店中查找记录,如下所示:

this.store.find('location', {uri: this.model('location')})

但是何时何地使用是我遇到的麻烦。或者,即使我只是手动进行 api 调用来获取位置数据,并以某种方式将其包含在我的主机显示模型中,这也是一个有用的技巧。

我很确定我不能为此使用关系,因为它并不真正存在于 JSON 中,对吧?

最佳答案

实际上,您可以通过关系来做到这一点,但您必须覆盖适配器和/或序列化器。

如果您扩展 JSONAPISerializer,您可能会将主机响应序列化为如下所示:

{
  id: "1",
  type: "host",
  attributes: {
    active: true
  },
  relationships: {
    location: {
      links: {
        related: "/location/1"
      }
    }
  }
}

假设这是您的 /models/host.js: 导出 DS.Model.extend({ 事件: DS.attr('boolean'), 位置: DS.belongsTo('位置') });

这是您的models/location.js: 导出 DS.Model.extend({ 名称: DS.attr('字符串') })

然后你可以做类似的事情

this.store.find('host', '1').then(host => console.log(Ember.get(host, 'location.name')))
<小时/>

我建议永远不要在 .find() 调用中覆盖 uri,而是在适配器上设置它,并构建一个不错的序列化器。

关于javascript - Ember - 通过商店或新的 ajax 调用手动链接到另一个模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36438670/

相关文章:

javascript - 如何在 Ember 中没有 Controller 的情况下更改查询参数?

javascript - Ember 数据 : Saving a model with an association in one request

javascript - 无法捕获来自 ember backgroundReload 的错误

ember.js - Ember 数据提交()

javascript - Angular 平移显示键

javascript - 如何设置信用卡到期日期输入字段的样式以包含空格和正斜杠?

javascript - 如何隐藏 div 直到某个字段值大于零

javascript - 替换/删除数组中的空条目

google-maps - 带有 Google map 的 Ember.js

javascript - Ember.js 每个助手不显示在条件中