2013-08-09 16 views
8

Kafamı bütün gün bu soruna karşı savundum ve bir çözüme yaklaştığımı hissediyorum, ancak bunun tam olarak gerçekleşmesini sağlayamıyorum. Ember-Data ve Fixtures bağdaştırıcısı ile Ember.js kullanıyorum, sonunda bir REST bağdaştırıcısına geçiyorum. Temel sorun şudur: çoktan çoğaya ilişkisi ile Siteler ve Denetleyicilerim var. Ben sitede göre sınıflandırılmaktadır onların mevcut site/danışman eşleşmeleri için bir seçme kutusu, yani kullanıcıya sunmak istiyorum:Ember.js ember-data Üzerinden yineleme Kayıt Dizileri

  • Sitesi 1 - Danışman 1
  • Sitesi 1 - Danışman 2
  • Sitesi 2 - Danışman 1 (çok çok unutmayın)
  • Bölge 2 - I devralan bir görünüme geçebilir tek bir dizi halinde bu iki kaynak kavga gerekir Danışman 3

(ya da wi Ember.Select'ten devralacaksınız. Şu anda "düz" olarak adlandırdığım Süpervizörler denetleyicisindeki bir yöntemle deniyorum, çünkü bu ilişkileri temsil eden düzleştirilmiş bir dizi döndürecektir. Kontrolör aşağıda gösterilmiştir. Verileri yerine getirdikten sonra verileri işlemek için .find(). 'a geri döndüğüm veriler, dört fikzemin tümünü içermesi için görünmektedir, ancak bunların üzerinde sayısız yöntemden herhangi birini denediğimde (özellikle ForEach), yalnızca ilk nesneyi iade etmiş gibi davranır. Veri nesnesinin yanı sıra data.get ('content') üzerinde yinelemeyi denedim. Ember’e oldukça yeni geldim, belki de bu konuda yanlışlarım var, ama bu bana çok garip gelse de. İlk console.log gelen günlük çıkışı()

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

Ona, burada özlüyorum ne söyleyebilir çağrı burada oluyor

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

Ve: İşte benim kod? Sonuçta ortaya çıkan dört denetçinin her birine nasıl erişileceğini anlayamıyorum.

Teşekkürler!

+0

Doğrudan [] operatörüne erişmek yerine data.objectAt (index) kullanmayı denediniz mi? –

cevap

9

Yüklemeden önce modellere erişiyormuşsunuz gibi görünüyor (Bunu özellikte görebilirsiniz, isUpdating). Tembel bir şekilde buna bakmak isterseniz, daha sonra sadece bir çiş parçasını görmek için daha sonra koşmak kullanabilirsiniz. Yoksa

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

Ember ile http://jsbin.com/ijiqeq/12/edit

İyi şanslar ... denetleyicisinde modelini kurmak ve bunu işlemek ve modeller yükleme bittiğinde kor görünümünü güncellemek sağlayabilirsiniz!

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

Yaptım. Sadece bir kez yinelenir ve ilk öğeyi kaydeder. – Ben

+0

Maalesef, ilk gönderiyi kaçırdım, hatayı gösteren bir jsbin/jsfiddle üretebiliyor musunuz? – Kingpin2k

+0

Buna bir göz attığın için teşekkürler, Daniel. Onu jsbin'e koydum: http://jsbin.com/ijiqeq/3/edit. Kutuyu çalıştırmak, veri nesnesinin dört öğeye sahip olduğunu, ancak öğelerin _all_'ını yinelediğimde null olarak gösterdiğimi gösterir, bu da gariptir ve ilk öğenin kodumda başka bir yere ayarlandığını düşünmemi sağlar. Bunun nasıl olabileceğinden emin değilim. Şimdi biraz daha şaşkınım ... – Ben