2017-01-31 2 views
1

私はリリースノートを見てきましたが、RSVPの動作の変更については何も見つかりませんでしたが、これは動作していない理由がありますか?ルート上のEmberjs 2.11.0奇妙なRSVPの動作

、非常に単純なモデル:

model() { 
    return RSVP.hash({ 
     posts: get(this, 'store').findAll('post') 
    }); 
    } 

とテンプレートで:

{{#each posts as |post|}} 
    {{post.title}} 
{{/each}} 

何も返さない、しかし私は、このような

model() { 
    return get(this, 'store').findAll('post'); 
    } 
などの標準的なモデルのコールを使用している場合

{{#each model as |post|}} 
    {{post.title}} 
{{/each}} 

期待どおりに動作します。私は前の2.9.0で多くのアプリをやったことがあり、これには問題はなかった。

リトル混乱!

答えて

1

RSVP.hashは、各キーが約束から解決された値を保持するオブジェクトを返します。あなたのケースでは

これはmodel{ posts: ... }ので、あなただけの.postsプロパティチェーンコール逃しているであろうことを意味します

ルート:

model() { 
    return RSVP.hash({ 
    posts: get(this, 'store').findAll('post') 
    }); 
} 

テンプレート:

{{#each model.posts as |post|}} 
    {{post.title}} 
{{/each}} 

このテンプレートを使用する場合は

{{#each posts as |post|}} 
    {{post.title}} 
{{/each}} 

あなたはsetupControllerpostsを設定することができます。

model() { 
    return RSVP.hash({ 
    posts: get(this, 'store').findAll('post') 
    }); 
} 

setupController(controller, model) { 
    controller.set('posts', model.posts); 
} 
+0

ああ、私はセットアップにコントローラを忘れました! –

+0

@Peaversあなたがうまく働いてくれてうれしいです:) – nem035

+0

'setupController'アプローチはうまくいきますが、' RSVP.hash'を避け、テンプレートの '{{each model as | post |}}'を使用する方が慣れ親しんでいます。あなたが本当に '{{各投稿を|投稿|}}'したいなら、コントローラにエイリアスを定義してください: 'posts:Ember.computed.alias( 'model')' –