【问题标题】:Get related model data ember.js获取相关模型数据 ember.js
【发布时间】:2014-06-13 15:35:48
【问题描述】:

在构建我的 restful api 时,我基本上遵循了 Ember 的 RESTAdapter 约定。

我有一个模型post 和一个模型tags,一个多对多的关系。因为我只会找到与帖子相关的标签,所以我没有定义相反的标签。

所以我在帖子模型tags: hasMany('tag') 中得到了这个,在restful api 中它返回tags: ["1", "2", "3"] 等等,就像它假设的那样。

所以现在我想知道如何在posts/1 url 上获取这些标签。当我在商店中查看时,它没有检索到任何标签。如何访问标签数据及其属性?

App.Tag = DS.Model.extend({
    name: attr()
});

App.Post = DS.Model.extend({
    active: attr(),
    name: attr(),
    organization: attr(),
    user_id: attr(),
    submitted_ts: attr(),
    status: attr(),
    tags: hasMany('tag')
});

{
  "post": {
    "0": {
      "id": "1",
      "active": "A",
      "name": "This is a test title",
      "organization": "Stryker",
      "user_id": "0",
      "submitted_ts": "1402664380",
      "status": "finalized"
    },
    "tags": [
      "30",
      "1",
      "14"
    ]
  },
  "tags": [
    {
      "id": "30",
      "type": "asdf",
      "name": "KNEE",
      "pivot": {
        "case_id": "1",
        "id": "30"
      }
    },
    {
      "id": "1",
      "type": "therapy",
      "name": "more things",
      "pivot": {
        "case_id": "1",
        "id": "1"
      }
    },
    {
      "id": "14",
      "type": "therapy",
      "name": "asdfasdf",
      "pivot": {
        "case_id": "1",
        "id": "14"
      }
    }
  ]
}

序列化器与本次调用无关

App.SpecialtySerializer = DS.JSONSerializer.extend({
    primaryKey: 'specialty_id'
});


App.ApplicationAdapter = DS.RESTAdapter.extend({
    namespace: 'api/v1',
    headers: function() {
        return {
            authToken: this.get('auth.authToken')
        };
    }.property("auth.authToken")
});

【问题讨论】:

  • 也许我对您的尝试感到困惑,您是在尝试异步获取标签,还是希望它们与帖子同时下来?
  • 以与帖子相同的类型下来。我返回的 json 就像 {post: { ... }} ..... tags: { ... } 格式很糟糕,我知道。但本质上,标签在帖子的 json 请求中。
  • 你会为上面的帖子和标签显示你的模型定义,并且可能会抛出一个 json 的例子,你说你正在使用 RESTAdapter,这仍然成立吗?
  • 是的,我正在使用 RESTAdapter。
  • 你正在扩展序列化程序,你能把它包括进来吗?

标签: javascript rest ember.js


【解决方案1】:

当你有这样的标签时,你是说标签信息随着帖子的请求而下降。如果这不是真的,那么您需要将标签标记为异步

tags: hasMany('tag')

如果它包含在 post 调用中,您只需通过 post.get('tags') 访问标签

【讨论】:

  • 我应该在哪里打这个电话? post.get('tags')?它应该在路线中吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多