2016-07-07 3 views
1

I Ember.RSVP.hash bin mit mehreren Modellen in einem Ember Controller zuzugreifen:Wie Sie sich richtig Daten Ember Modell von Steuerung zugreifen

export default Ember.Route.extend({ 
    model() { 
     return Ember.RSVP.hash({ 
      categories: this.store.findAll('category') 
      languages: this.store.findAll('language'), 
      requirementTypes: this.store.findAll('requirement-type') 
     }); 
    }, 

    setupController: function(controller, models) { 
     controller.set('categories', models.categories); 
     controller.set('languages', models.languages); 
     controller.set('requirementTypes', models.requirementTypes); 
    } 
}); 

ich unerbittlich gegoogelt haben, wie diese Modelldaten richtig in meinem Controller zugreifen . Der einzige Weg, den ich bisher gefunden habe, fühlt sich viel zu hackig an. Ich möchte nur Zugriff auf die unverarbeiteten HTTP-Antwortdaten haben, die von meiner API zurückgegeben werden.

Allerdings, wenn ich this.get (‚Kategorien‘) schreiben, das, was ich bekommen ist wieder ziemlich hässlich und ist eine viel komplexere Aufgabe als das, was mein api zurückgegeben:

console.log(this.get('categories'))

Die " InternalModel“Einträge enthalten die eigentlichen Daten in dem _data Attribute, das von meinem api zurückgegeben wurde:

InternalModel entry details

gibt es einen besseren, Reco Verbesserte Möglichkeit, auf diese Modelldaten zuzugreifen, die von meiner API zurückgegeben und über die zugehörige Route an die Steuerung weitergegeben werden? Ich hatte erwartet, auf die genauen Daten zugreifen zu können, die meine API mit etwas wie diesem.get ('categories') zurückgab und sofort auf die Modelldaten zugreifen konnte, die meine API gesendet hatte.

+0

Warum möchten Sie auf genaue API-Antwort zugreifen? Können Sie nicht einfach Ihre Modelle definieren, um alle Daten zu haben, die Sie benötigen? Sie werden nicht in der Lage sein, die genaue Antwort mit Ember-Speicher-Methoden zugreifen, müssen Sie regelmäßig Ajax Anfrage verwenden, um dies zu tun. – Igor

+0

Ich benutze Ember Data, um die API-Anfrage zu machen und dann diese Modelldaten an den Controller zu übergeben. Ist die Art und Weise, wie ich es gemacht habe, wirklich der netteste Weg, es zu tun? Wenn es dann ist, bin ich mir nicht sicher, ob ich den Sinn von Ember Data verstehe und lieber manuelle HTTP-Anfragen verwenden würde. – lkgarrison

+0

Sie können alle drei Eigenschaften in einem einzigen Durchgang mit 'controller.setProperties (models)' festlegen –

Antwort

3

Ja, das ist der richtige Weg. Glimmdaten sind eine Persistenzschicht für Glut, Sie müssen sie nicht verwenden, wenn Sie nicht wollen. Aber es ist sehr nützlich, und der Punkt ist, eine schöne Möglichkeit zu haben, auf Ihre Daten über Modellobjekte zuzugreifen.

In Ihrem Fall, wenn Sie eine der Sammlungen aus dem Modellergebnis durchlaufen, würden Sie Ember-Datensätze erhalten, die Ihre Daten enthalten. So in der Steuerung können Sie tun:

this.get('categories').forEach(category => { 
    // Do something with category data, i.e. 
    console.log('Category name:', category.get('name')); 
}); 
Verwandte Themen