注: Ember Rails 0.18.2 および ember-source 1.12.1 を使用
奇妙な機能を持つ Ember アプリを継承しました。私は Ember を初めて使用するので、これは正常なのかもしれませんが、奇妙だと思います。
3 つのモデルがあります。
- 両親
- ゲーム
- コメント
保護者がゲームを表示すると、URL は次のようになります。
/<parent slug>/games/<game_id>
(スラッグは、親の一意の ID です)。
この URL には、次のコードを含むテンプレートがあります。
{{#unless commentsOpen}}
{{#link-to 'comments' class="Button easyButton"}}Chat with parents in your pod{{/link-to}}
{{/unless}}
{{outlet}}
上記のボタンをクリックすると、URL が次のように変更されます。
/<parent slug>/games/<game_id>/comments
次に、そのゲームのすべてのコメントが表示されます。
ビューからそのボタンを削除し、ゲームごとに自動的にコメントを表示する必要があります。
API は Rails であり、既に API エンドポイントを変更して、Game が (オブジェクトの埋め込み配列として) 要求されると同時にすべてのコメントを返すことができます。
しかし、{{outlet}} を何に置き換えるのでしょうか? 私の理解では、 {{outlet}} は次のルートによりコメント テンプレートに委任されています。
App.CommentsRoute = Ember.Route.extend
model: ->
return this.store.find('comment', {
game: @modelFor('game').get('id')
parent: @modelFor('parent').get('slug')
}).then( (models) -> models.toArray() )
そのルートを削除し、コメントを Game モデル内の埋め込みオブジェクトにする必要があると思います。次に、アウトレットを次のようなものに置き換えますか?
{{#each comment in Game}}
<div class="commentItem">
<div class="commentItem-author">{{comment.parent_name}}</div>
<div class="commentItem-body">{{comment.body}}</div>
</div>
{{each}}
編集
これはルーターです:
App.Router.map(function() {
this.route('index', {
path: '/'
});
return this.resource('parent', {
path: '/:parent_id'
}, function() {
this.resource('games', {
path: '/games'
});
return this.resource('game', {
path: '/game/:game_id'
}, function() {
return this.resource('comments', {
path: '/comments'
});
});
});
});