2016-05-29 5 views
0

コードは1000語を話す。私はここで何をしようとしているのですか?Ember JSのRSVPハッシュによるループ?

ユーザー副経路などindexshoweditcreate等内で使用するためのトップレベルで共通の選択可能なオプションをロードする "ルート" ルート

...

-- /pods/users/route.js 

model() { 
    return RSVP.hash({ 
     userCategories: this.store.findAll('user-category'), 
     userSources: this.store.findAll('user-source'), 
     userGroups:  this.store.findAll('user-group'), 
    }); 
}, 

ユーザー "作成"ルート

のサブルート私はすでにロードされたオプション上記と名付けられた変数としてテンプレートにロードをループにしたい:

-- /pods/users/create/route.js 

setupController(controller, model) { 

    let rootModel = this.modelFor('users'); 

    rootModel.forEach(function (model, name) { 
     set(controller, name, model); 
    }); <-- THIS IS THE BROKEN PART... 

    ... 

} 

問題

私はError while processing route: rootModel.forEach is not a function TypeError: rootModel.forEach is not a function

です取得しています.forEachループでそのルートモデルをループする "Ember Way"がありますか、それともトップレベルの変数の中でロードすることに悩まされますか?

-- /pods/users/create/route.js 

setupController(controller, model) { 

    let rootModel = this.modelFor('users'); 

    set(controller, 'rootModel', rootModel); 

    ... 

} 
+0

なぜそれをループする必要がありますか?モデルフックを定義した方法で、テンプレートのデータにアクセスすることができます。例えば、 '{{#each model.userCategories as | category |}}' – Igor

+0

私はそれが読みやすさの好みだと思います。先頭の 'model'を使わずに' userCategories'にアクセスしてください。論理的に私はそれが本当にどちらの方法でも問題ではないことを知っていますが、{{#each userCategories as | userCategory |}} 'はちょっときれいだと思います。 – SamSebastian

答えて

4
Object.keys(rootModel).forEach(function(name) { 
    var model = rootModel[keyName]; 
    set(controller, name, model); 
    // ... 
}); 

または可能なあなただけRSVP.hash必要はありませんが、配列が解決値が含まれて解決する約束を返すRSVP.all