8

私は一日中この問題に頭を悩ませており、解決に近づいているように感じますが、それを実現することはできません. 私は 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 つのスーパーバイザーのそれぞれにアクセスする方法がわかりません。

ありがとう!

4

1 に答える 1