2013-08-09 6 views
8

Przez cały dzień walczyłem z tym problemem i wydaje mi się, że jestem bliski rozwiązania, ale po prostu nie mogę tego zrobić. Używam Ember.js z Ember-Data i adapterem urządzeń, w końcu migruję do adaptera REST. Podstawowy problem polega na tym, że mam Witryny i Nadzorcy, z relacją wiele-do-wielu wiele-do-wielu. Chcę przedstawić użytkownikowi pole zaznaczania dla swoich istniejących par site/kierownik, posortowane według miejscu, tjPowtórzenie Ember.js tablice rekordów danych

  • Site 1 - Supervisor 1
  • Site 1 - Supervisor 2
  • Portal 2 - Inspektor 1 (pamiętaj, wiele do wielu)
  • Portal 2 - Inspektor 3

muszę użerać te dwa środki w jednej tablicy, że mogę przejść do widoku, który dziedziczy (lub wi będę dziedziczyć) z Ember.Select. Obecnie próbuję to z metodą na kontrolerze Supervisors, który nazywam "płaski", ponieważ zwróci spłaszczoną tablicę reprezentującą te relacje. Kontroler pokazano poniżej. Używam .find(). Then() do przetwarzania danych po spełnieniu obietnicy. Dane, które otrzymuję , pojawiają się, aby pomieścić wszystkie cztery moje urządzenia, ale kiedy wypróbuję jedną z metod przeliczalnych na nich (szczególnie dla AnyAach), zachowuje się tak, jakby zwracał tylko pierwszy obiekt. Próbowałem iterować nad obiektem danych, a także data.get ("treść"). Jestem całkiem nowy dla Embera, więc może i tak się mylę, ale niezależnie od tego wydaje mi się to bardzo dziwne. Oto mój kod:

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

i tu jest wyjście log z pierwszego console.log() zadzwonić

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

Czy możesz mi powiedzieć, co mam tu brakuje? Nie mogę wymyślić, jak uzyskać dostęp do każdego z czterech wynikowych przełożonych.

Dzięki!

+0

Czy próbowałeś użyć data.objectAt (indeks) zamiast dostępu bezpośrednio przez operatora []? –

Odpowiedz

9

Wygląda na to, że korzystasz z modeli przed ich załadowaniem (możesz to zobaczyć w usłudze, isUpdating). Jeśli masz ochotę leniwie patrzeć na to, możesz użyć ember run później, aby zobaczyć przedmioty nieco później. Lub można ustawić model na kontrolerze i uczynić go i niech Ember zaktualizować widok, gdy modele są wykończone loading ...

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

Powodzenia z Cienia!

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

Zrobiłem. To tylko iteruje raz i rejestruje pierwszy element. – Ben

+0

Przepraszam, ominąłem to w pierwszym poście, Czy możesz wygenerować jsbin/jsfiddle pokazujący błąd? – Kingpin2k

+0

Dzięki za spojrzenie, Daniel. Umieszczam go w jsbin: http://jsbin.com/ijiqeq/3/edit. Uruchamianie go w koszu pokazuje, że obiekt danych zawiera cztery elementy, ale _all_ elementów pokazuje wartość null, gdy je powtarzam, co jest dziwne i sprawia, że ​​myślę, że jakoś pierwszy element został ustawiony w innym miejscu w moim kodzie. Nie wiem, jak to się mogło stać. Teraz jestem trochę bardziej zdezorientowany ... – Ben