2017-04-04 3 views
1

Ich benutze RESTAdapter und versuche herauszufinden, wie man auf seitengeladene Daten zugreifen kann.
Eine Probe der Nutzlast ist:Ember: Zugriff auf sidegeladene Daten in setupController mit ember-Daten

{ 
    "category": { 
     "categoryName": "test category", 
     "id": 6, 
     "products": [ 
      4419, 
      502, 
      3992 
     ] 
    }, 
    "products": [{ 
     "description": "Whatevs", 
     "id": 4419, 
     "name": "Product 1", 
     "price": 114.95, 
     "skuid": "S21046" 
    }, { 
     "description": "Whatevs", 
     "id": 502, 
     "name": "Product 2", 
     "price": 114.95, 
     "skuid": "SOLS2594" 
    }, { 
     "description": "Whatevs", 
     "id": 3992, 
     "name": "Product 3", 
     "price": 114.95, 
     "skuid": "S21015" 
    }] 
} 

I ‚Kategorie‘ sehen und ‚Produkt‘ Datenmodelle (und Daten) in dem glühenden Kohlen Inspektoren, so dass ich weiß, dass sie geladen werden.

Ich kann sogar auf die Produkte in der Vorlage model.products zugreifen. ABER ich kann nicht auf model.products in der Route setupController zugreifen. Der Fehler, den ich bekomme ist:

TypeError: Cannot read property '_relationships' of undefined 

Das ist wirklich verblüfft mich! Meine Route model Haken ist:

model(params) { 
    return this.get('store').queryRecord('category', { 
     id: params.id 
    }) 
} 

Der setupController Haken (die bewirkt, dass die Fehler) ist:

setupController(controller, model) { 
    controller.set('results', model.products); 
} 

Der 'Kategorie' Modell:

export default DS.Model.extend({ 
    products: hasMany('product'), 
    categoryName: attr('string') 
}); 

Das 'Produkt' Modell:

export default DS.Model.extend({ 

    name: attr('string'), 
    skuid: attr('string'), 
    price: attr('number'), 
    description: attr('string') 

}); 

Meine Vorlage (das funktioniert, wenn ich die ‚setupController‘ Haken aus der Route entfernen):

{{#each model.products as |product|}} 
{{product.name}} {{product.skuid}}<br /> 
{{/each}} 

Ich mag würde die Lage sein, model.products für den Zugriff auf von der setupController Route so kann ich es noch etwas anderes nennen. Jede Hilfe wird geschätzt.

Antwort

2

Beziehung gibt Versprechen. Um das Ergebnis zu erhalten, müssen Sie then verwenden. Der Zugriff auf die Vorlage funktioniert jedoch, da die Vorlage standardmäßig auf das Verspre- chen wartet.

setupController(controller, model) { 
    //controller.set('results', model.products); 
    model.get('products').then((result) => { 
    controller.set('results',result); 
    }); 
} 

Bitte geben Sie weiter lesen relationships as promises Leitfaden.

Verwandte Themen