2013-05-01 99 views
0

我設置了一個應用程序,可以在Fixture Adapter上運行良好。Ember不渲染嵌入式數據

這是我使用的渲染模板:

<div class="large-7 columns" id="song-list"> 
    <div class="playlist-meta row"> 
     <div class="large-12 columns">  
     <h4 class="subheader">Playlist</h4>  
     <h1 class="playlist-title">{{controller.name}}</h1> 
     </div> 
    </div> 

    {{#view App.SortableView}} 
    {{#each song in controller.songs}} 
     <li class="row song"> 
     <button {{action "playSong" song}} class="toggle-play"><span class="entypo play"></span></button> 
     <h4 class="subheader song-artist"><a href="#">{{song.artist}}</a></h3> 
     <h3 class="song-title"><a href="#">{{song.name}}</a></h3> 
     </li>  
    {{/each}} 
    {{/view}} 
    </div> 

當我使用REST適配器,然而,歌曲沒有渲染。播放列表名稱本身仍呈現,但不是歌曲。

這就是被退回來的JSON方面:當我使用夾具數據

{"playlist":{"id":1,"name":"playlist","songs":[{"id":1,"name":"Song Name","artist":"Song Artist","soundcloud":"/tracks/1"}]}} 

模型的定義:

App.Playlist = DS.Model.extend({ 
    name: DS.attr('string'), 
    songs: DS.hasMany('App.Song'), 
}); 

App.Song = DS.Model.extend({ 
    name: DS.attr('string'), 
    artist: DS.attr('string'), 
    soundcloud: DS.attr('string'), 
    playlist: DS.hasMany('App.Playlist'), 
}); 

App.Playlist.FIXTURES = [ 
    { 
    id: 1, 
    name: 'Playlist Name', 
    songs: [1, 2, 3], 
    }]; 
App.Song.FIXTURES = [ 
    { 
    id: 1, 
    name: 'Song Name', 
    artist: 'Song Artist', 
    soundcloud: '/tracks/12345', 
    }]; 
+0

難道說你應該有'{在playlist.songs {#each歌}}'?您解析的JSON樣本是一個帶有「播放列表」鍵的對象,該對象又具有「歌曲」鍵。但是,我想{'{{controller.name}}'不會工作,它必須是{{playlist.name}}'。 – Christoffer 2013-05-01 22:05:41

+0

{{controller.name}}按預期工作(在此示例中輸出「播放列表」)。由於我能夠訪問該名稱,因此我認爲歌曲也可以。除非我忽略了一個錯字,這與我在Fixture Data中的設置完全相同。 – paulruescher 2013-05-01 22:09:21

+0

您是如何定義模型的?更重要的是關係?你能否更新顯示這個問題的問題?從FixtureAdapter加載數據與RESTAdapter不一樣。 – intuitivepixel 2013-05-01 22:25:39

回答

0

這裏是我的解決方案。我不知道這是否是'Ember Way',所以如果有人知道更好的事情,請讓我知道更好的解決方案。但暫時這對我很有用。

我改變了我的JSON輸出到以下(與我的問題,我是如何輸出JSON):

{ 
"songs":[ 
    {"id":1,"name":"Song Name","artist":"Artist Name","soundcloud":"/tracks/123"}, 
    {"id":2,"name":"Song Name 2","artist":"Artist Name 2","soundcloud":"/tracks/124"} 
], 
"playlist": 
    {"id":1,"name":"Playlist Name","song_ids":[1,2]} 
} 

我使用「餘燼-Rails的寶石,其中包括https://github.com/rails-api/active_model_serializers(請參見嵌入式關聯)。

這是我PlaylistSerializer:

class PlaylistSerializer < ActiveModel::Serializer 
    embed :ids, :include => true 

    attributes :id, :name 
    has_many :songs, :key => :song_ids, :root => :songs 
end