私は一日中この問題に頭を悩ませており、解決に近づいているように感じますが、それを実現することはできません. 私は Ember-Data と Fixtures アダプターで Ember.js を使用していますが、最終的には REST アダプターに移行します。基本的な問題は次のとおりです。多対多の関係を持つサイトとスーパーバイザーがあります。サイトごとに並べ替えられた、既存のサイト/スーパーバイザーのペアリングの選択ボックスをユーザーに提示したいと考えています。
- サイト 1 - スーパーバイザー 1
- サイト 1 - スーパーバイザー 2
- サイト 2 - スーパーバイザー 1 (多対多であることを思い出してください)
- サイト 2 - スーパーバイザー 3
これら 2 つのリソースを、Ember.Select から継承する (または継承する) ビューに渡すことができる 1 つの配列にまとめる必要があります。現在、これらの関係を表すフラット化された配列を返すため、「フラット」と呼んでいるスーパーバイザーコントローラーのメソッドでこれを試みています。コントローラを以下に示します。私は .find().then() を使用して、約束が果たされた後にデータを処理しています。返ってきたデータが表示される4 つすべてのフィクスチャを含めることができますが、列挙可能なメソッド (特に forEach) のいずれかを試すと、最初のオブジェクトのみが返されたかのように動作します。data オブジェクトと data.get('content') を反復処理してみました。私は Ember にまったく慣れていないので、とにかく間違っているのかもしれませんが、とにかくこれは私には非常に奇妙に思えます。これが私のコードです:
App.SupervisorsController = Ember.ArrayController.extend({
flat: function(){
return App.Supervisor.find().then(function(data){
var c = data.get('content') ;
console.log(c) ; // <-- logs an object containing four records,
// with attribute "length" showing 4
// Great! (see below for log output)
console.log(c[0]) ; // <-- logs first record. Great!
console.log(c[1]) ; // <-- undefined (?!)
console.log(c[2]) ; // <-- undefined (?!)
console.log(c[3]) ; // <-- undefined (?!)
console.log(c.get('length')) ; // <-- 1 (not four?!)
return c ; // <-- eventually this will return the newly constructed array
}) ;
}
}) ;
そして、これが最初の console.log() 呼び出しからのログ出力です
0: Object
1: Object
2: Object
3: Object
__ember1376005434256: "ember325"
__ember1376005434256_meta: Meta
_super: undefined
length: 4
__proto__: Array[0]
ここで何が欠けているか教えてもらえますか? 結果として得られる 4 つのスーパーバイザーのそれぞれにアクセスする方法がわかりません。
ありがとう!