2016-06-19 5 views
0

私は、ユーザーがボタンを押すと、コンポーネントの新しいインスタンスを生成し、それをページに追加する単純なWebアプリケーションを構築しています。親コンポーネントからコンポーネントの新しいインスタンスを作成し、DOMに注入しますか? - Ember

しかし、私は...テンプレート

親コンポーネントの.jsファイルからコンポーネントの新しいインスタンスを生成するかどうかはわかりません。

{{yield}} 

<div class="feed-tracks-container"> 
    {{#each model.tracks as |track|}} 
    {{#feed-card track=track}}{{/feed-card}} 
    {{/each}} 
</div> 

<div class="feed-controls-container"> 
    <div class="feed-control-container" style="width:25%" {{action (route-action "undoLastAction" track)}}> 
    <img src="images/undo-btn.png"/> 
    </div> 
    <div id="skip-btn" class="feed-control-container" style="width:25%" {{action (route-action "skipTrack" track)}}> 
    <img src="images/skip-btn.png"/> 
    </div> 
    <div id="share-btn" class="feed-control-container" style="width:25%" {{action (route-action "shareTrack" track)}}> 
    <img src="images/share-btn.png"/> 
    </div> 
    <div class="feed-control-container" style="width:25%" {{action (route-action "togglePreview" track)}}> 
    <img src="images/preview-inactive-btn.png"/> 
    </div> 
</div> 

ルート:

import Ember from 'ember'; 

export default Ember.Route.extend({ 
model: function() { 
    return { 
     tracks: [ 
     { 
      id: 1, 
      track_name: "Karate", 
      artist_name: "R3hab", 
      track_length: 230, 
      share_count: 10864, 
      background_img: "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR3oh8ADMDG3hVZ1I_9IJumqLXJNS2-TBPrxpUdRL8J_71H5I0kyw", 
      waveform_img: "http://i.imgur.com/kP6KCJl.png" 
     }, 
     { 
      id: 2, 
      track_name: "Care", 
      artist_name: "R3hab", 
      track_length: 230, 
      share_count: 1322, 
      background_img: "https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcS5OsXpnek1SMJzol7hYnRt9QjNEHwPf1InRAKwoWocZWvMzPqo0w", 
      waveform_img: "http://i.imgur.com/8o0AdWk.png" 
     }, 
     { 
      id: 3, 
      track_name: "Soundwave", 
      artist_name: "R3hab", 
      track_length: 230, 
      share_count: 14554, 
      background_img: "http://www.music-bazaar.com/album-images/vol17/800/800095/2652999-big/Soundwave-Extended-Mix-Single-cover.jpg", 
      waveform_img: "http://i.imgur.com/8o0AdWk.png" 
     } 
     ] 
    } 
    }, 
    actions: { 
    skipTrack: function() { 
     var new_track = { 
     id: 6, 
     track_name: "I'm new!", 
     artist_name: "R3hab", 
     track_length: 230, 
     share_count: 14554, 
     background_img: "http://www.music-bazaar.com/album-images/vol17/800/800095/2652999-big/Soundwave-Extended-Mix-Single-cover.jpg", 
     waveform_img: "http://i.imgur.com/8o0AdWk.png" 
     } 
     var tracks = this.modelFor('feed').tracks; 
     tracks.shift(); 
     tracks.pushObject(new_track); 
    }, 
    shareTrack: function() { 
     console.log("sharing"); 
    } 
    }, 
}); 

ANSWER 新しいオブジェクトを配列に挿入するときに私はpushObjectを使用していませんでした。

答えて

0
//template 
{{#each componentNames in componentName}} 
    {{component componentName data=data}} 
{{/each}} 

コントローラのcomponentNamesプロパティを変更します。 componentNames配列に追加するときに新しいコンポーネントをレンダリングする必要があります。

edit-コントローラのスワップコンポーネントです。あなたの質問に答えます。

+0

これは動作しますか?それとも? –

+0

はい、うまくいきました!これは今、配列からオブジェクトを削除すると、アニメーションが実行される前にビューが更新されます。アニメーションの完了時にコンポーネントからルートを呼び出す方法があるのだろうかと思います。 – user3661956

+0

私は、あなたはルートのものを手に入れていますが、あなたがしたいことは、コンポーネントにアニメーションクラスを適用し、Em.run.laterの配列からそれを削除するロジックをラップすることです。 –

関連する問題