2017-11-10 5 views
0

Kürzlich wurde dies ein Fehler in meiner Anwendung, obwohl ich nicht weiß, was sich geändert hat, um es so zu machen (Ich habe die Version von Ember, die noch 1.13 ist, nicht aktualisiert). Was ich herausfinden muss, ist, wie man auf das Objekt eines einzelnen Datensatzes auf dem Modell in herkömmlicher Weise zugreift.Wie erhalte ich das Datenobjekt von einem einzelnen Datensatz im Modell?

Ich habe den folgenden Code, um meine filtern model basierend auf zwei weitere Eigenschaften:

recordsBySelectedShapeAndColor = get(this, "model").filter(function(rec) { 
    //filter the model by the chosen shape and color 
    return (
     get(rec, "shape") === theShape && 
     get(rec, "color") === theColor 
    ); 
    }); 

Ich brauche dann eine Zusammenfassung dieser gefilterten Datensätze erstellen, die ich verwende reduce() für, aber wenn das Filter , gibt nur einen Datensatz dann reduce nicht die richtigen Ergebnisse zurückgibt, so habe ich die folgende Bedingung:

if (recordsBySelectedShapeAndColor.length < 2) { 
    summary = recordsBySelectedShapeAndColor[0]._data; 
} else { 
    summary = recordsBySelectedShapeAndColor.reduce(function(a, b) { 
... 
} 

Es ist die Linie innerhalb des if, die die ein einfaches Objekt länger Rückkehr wird nicht, so dass ich ch es an summary = recordsBySelectedShapeAndColor[0]._internalModel._data; angegangen und es funktioniert, aber es scheint fischig (._data immer auch). Ist es Code-Geruch, um auf unterstrichene Eigenschaften zuzugreifen? Wenn ja, wie kann ich nur die Daten von diesem einzelnen Datensatz auf dem Modell erhalten?

Antwort

1

Verwenden Sie get(recordsBySelectedShapeAndColor, 'firstObject')

+0

Geez, ist das alles ?? Ich hatte 'recordsBySelectedShapeAndColor.firstObject' ausprobiert und kam nirgendwohin, weil es eine Klasse zurückgab, in der ich das Datenobjekt nicht sehen konnte, also dachte ich, dass ich noch nicht da war. Vielen Dank!!! Dies funktioniert auch, nicht sicher, welche ist besser zu verwenden: 'recordsBySelectedShapeAndColor.get (" firstObject ")' – redOctober13

+1

In ember einfach immer '.get'! Und das ist kein echtes 'Array', sondern ein Ember' Enumerable'. – Lux

+1

Danke @Lux. Von diesem (https://stackoverflow.com/questions/40606827/difference-between-ember-get-and-this-get) scheint es einen guten Anwendungsfall für 'Ember.get()' über 'dies zu geben. get() 'wenn Sie nicht wissen, ob Ihr Objekt ein Ember-Objekt ist, weil' get() 'weiter funktioniert, während' this.get() 'fehlschlägt, wenn es kein Ember-Objekt ist. – redOctober13

Verwandte Themen