0

Fixture Adapter をオンにして問題なく動作するアプリをセットアップしました。

これは、レンダリングに使用しているテンプレートです。

  <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',
  }];
4

1 に答える 1

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]}
}

https://github.com/rails-api/active_model_serializersを含む「ember-rails」gem を使用しています(組み込み関連のセクションを参照)。

これは私の PlaylistSerializer です:

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

  attributes :id, :name
  has_many :songs, :key => :song_ids, :root => :songs
end
于 2013-05-02T02:00:55.453 に答える