簡體   English   中英

Ember.js / Rails嵌套JSON

[英]Ember.js / Rails Nested JSON

我正在開發一個基本的Ember / Rails應用程序,該應用程序具有很多嵌套關系,例如:

class Release < ActiveRecord::Base
  has_many :tracks
end

當我點擊Releases端點時,我得到了一些可愛的JSON,如下所示:

{
  releases: [{
    id: 1,
    name: "Release Name",
    artist: "Artist Name",
    tracks: [{
      id: 1,
      name: "Track 1",
    },
    {
      id: 2,
      name: "Track 2",
    }]
  }]
}

我已經閱讀了幾乎所有可以在網上找到的有關此內容的內容。 如何將“ Track”模型映射到Ember,以便同時顯示帶有其軌道的發行版?

DS.hasMany嗎? asyc:true嗎? embedded:true嗎? 這些都不適合我。

版本:

  • 灰燼:1.4.0-beta.1 + canary.011b67b8
  • 灰燼數據:1.0.0-beta.5 + canary.d9ce2a53
  • 車把:1.1.1
  • 的jQuery:1.10.2

以下使用Active Model SerializerDS.RESTAdapter為我工作

Rails用戶模型:

class User < ActiveRecord::Base
  has_many :photos
end

Rails用戶序列化器:

class UserSerializer < ActiveModel::Serializer
  attributes :id, :name
  has_many :photos, embed: :ids, key: "photos", include: true
end

(神奇之處在於has_many的參數。這意味着它們被添加為第二個數組而不是嵌入式數組,並且還將關聯的標題設置為photos ,這是Ember默認需要的)

這使Rails返回如下所示的JSON:

{
  user: {
    id: 1,
    name: "Joe Bloggs",
    photos: [1,2]
  },
  photos: [
    {
      id: 1,
      imageSrc: "/photo1.jpg"
    },
    {
      id: 2,
      imageSrc: "/photo2.jpg"
    }
  ],
}

然后在Ember中,我定義用戶模型如下:

App.User = DS.Model.extend({
  photos: DS.hasMany('photo'),
  name: DS.attr("string")
});

最后,我定義了一條加載用戶模型的路由:

App.UserShowRoute = Ember.Route.extend({
    model: function(params){
    return this.store.find('user', params.user_id);
  }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM