2013-08-09 3 views
8

저는 하루 종일이 문제에 대해 머리를 쓰고 있었고, 저는 솔루션에 가깝지만 느낄 수 없었습니다. Ember-j와 Ember-Data 및 Fixtures 어댑터를 사용 중이며 결국 REST 어댑터로 마이그레이션합니다. 기본적인 문제는 다음과 같습니다. many-to-many 관계가있는 사이트 및 감독자가 있습니다. 내가 사이트으로 분류 기존 사이트/수퍼바이저 짝을위한 선택 상자, 즉을 사용자에게 제공 할 :Ember.js 반복 데이터 레코드 배열

  • 사이트 1 - 수퍼바이저 1
  • 사이트 1 - 관리자 2
  • 사이트 2 - 감독자 1 은 (많은 많은 기억)
  • 사이트 2 - 내가 상속보기로 전달할 수있는 하나의 배열로이 두 가지 자원을 다툰 할 필요가 감독자 3

(또는 Wi Ember.Select에서 상속). 현재 이러한 관계를 나타내는 병합 배열을 반환하기 때문에 "평면"이라고 부르는 수퍼바이저 컨트롤러의 메서드로이 작업을 시도하고 있습니다. 컨트롤러는 아래와 같습니다. 약속을 완료 한 후 .find(). then()을 사용하여 데이터를 처리합니다. 내가 돌아 오는 데이터가 인데 내 모든 조명기를 포함하는이 있지만 그 중 하나 (특히 forEach)에서 열거 형 메서드를 사용하면 첫 번째 개체 만 반환 한 것처럼 동작합니다. data.get ('content')뿐만 아니라 데이터 객체에 대해서도 반복적으로 시도했다. 나는 Ember에게 아주 익숙하다. 그래서 어쨌든 나는 이것을 잘못 생각할 것이지만, 이것에 관계없이 이것은 나에게 매우 이상하게 보인다. 첫 번째 CONSOLE.LOG에서 로그 출력은()

0: Object 
1: Object 
2: Object 
3: Object 
__ember1376005434256: "ember325" 
__ember1376005434256_meta: Meta 
_super: undefined 
length: 4 
__proto__: Array[0] 

당신은 내가 여기에 누락 무엇을 말해 줄 수 호출 여기

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 
    }) ; 
    } 
}) ; 

을 그리고 : 여기 내 코드는? 4 명의 결과 감독자 각각에 액세스하는 방법을 알 수 없습니다.

감사합니다.

+0

[] 연산자를 통해 직접 액세스하는 대신 data.objectAt (인덱스)를 사용해 보셨습니까? –

답변

9

로드가 완료되기 전에 모델에 액세스하는 것처럼 보입니다 (속성에서 볼 수있는 isUpdating). 당신이 느긋하게 이것을보고 싶다면 나중에 실행할 수있는 ember를 사용하여 나중에 약간의 항목을 보도록하십시오. 또는 당신은

Ember.run.later(function(){ 
    data.forEach(function(item){ 
    console.log(item); 
    }); 
}, 2000); 



App.ApplicationRoute = Ember.Route.extend({ 
    activate: function(){ 
    this.controllerFor('supervisors').set("model", App.Supervisor.find()); 
    } 
}); 

엠버와 http://jsbin.com/ijiqeq/12/edit

행운을 빕니다 ... 컨트롤러 모델을 설정하고 렌더링 및 모델로드 완료되면 엠버 뷰를 업데이트 할 수 있습니다!

someArray: function(){ 
    var arr = Ember.A(); 
    this.get('model').forEach(function(item){ 
    item.get('sites').forEach(function(site){ 
     arr.pushObject(someObject); //some object that is represents each specific combination 
    }); 
    }); 
}.property('model') 
+1

나는했다. 한 번만 반복하고 첫 번째 항목을 기록합니다. – Ben

+0

죄송합니다, 첫 번째 게시물에서 놓친, 당신은 오류를 보여주는 jsbin/jsfiddle 생성 할 수 있습니까? – Kingpin2k

+0

다니엘 감사합니다. 나는 그것을 jsbin에 넣었다 : http://jsbin.com/ijiqeq/3/edit. 빈에서 실행하면 데이터 개체에 네 개의 항목이 있지만 그 중 _all_가 반복 될 때 null이 표시되어 이상하게 보이고 어떻게 든 첫 번째 항목이 내 코드의 다른 위치에 설정되었다고 생각하게 만듭니다. 그 일이 어떻게 일어날 지 확신하지 못합니다. 그래서 좀 더 혼란스러워 ... – Ben