2016-05-24 24 views
0

Ich habe Probleme mit Glut Daten und ich suchte Hilfe. Ich verwende findRecord, um einen einzelnen Datensatz ('Standort') zurückzugeben und dann ein einzelnes Attribut aus diesem Datensatz ('Produkt') zu erhalten. Es gibt andere Attribute, die gut ankommen (Telefon, Name, usw.), aber "Produkt" kehrt nicht zurück, bis ich den Modellanruf mindestens zweimal ausgelöst habe. Ich habe meine Netzwerk-Registerkarte überprüft und es kommt gut aus der API, aber es scheint nicht in Glut Daten geladen werden (bis es zweimal ausgelöst wird). Ist noch jemand darüber gestolpert? Ich bin völlig ratlos. Vielen Dank!Ember Daten laden nicht alle meine Daten

+0

Ich habe ein Update, es scheint, als ob das Objekt mit allen richtigen Eigenschaften zurückgegeben wird, einschließlich Produkt, aber wenn ich ein record.get ('Produkt') mache, gibt es undefined bis zum zweiten Aufruf. – Schnaars

+4

Poste deinen Code, wir sind keine Zauberer hier drüben. –

+0

Ist 'Produkt' eine Beziehung wie' hasMany' oder 'goesTo'? Es könnte sein, dass Sie es mit Async laden müssen: false [gehört zu async] (http://emberjs.com/api/data/classes/DS.Model.html#method_belongsTo) –

Antwort

0

Es sieht für mich, dass Sie ein Modell, das wie folgt definiert ist:

Dann wird der Code, den Sie höchstwahrscheinlich auch etwas auszuführen versuchen, ist:

let name = location.get('name'); // This returns immediately. 
let product = location.get('product'); // This does not work as expected 

Wenn das Der Fall, dann ist Ihr Problem, dass Sie versuchen, das Produkt von der Position synchron zu erwerben, während es eine asynchrone Beziehung ist. Dies bedeutet, dass Sie zwei Möglichkeiten:

Option # 1: die Beziehung Synchron Stellen (wie von Paul Oliver erwähnt)

/* location model */ 
export default Model.extend({ 
    phone: attr(), 
    name: attr(), 
    /*...*/ 
    product: belongsTo('product', {async: false}) 
}); 

Option # 2: Warten Sie, das Versprechen zu vervollständigen

location.get('product').then(function(product) { 
    // Do something with product here 
});