• Skip to content
  • Skip to primary sidebar

Woytec

Digital

  • Für dich
    • Digital Analytics
    • Online Marketing
    • Web Entwicklung
    • Linux
    • FAQ
    • Linkliste
    • Downloads
  • Über mich
    • Schreib mir
  • Ehrenamt
  • Datenschutz
  • Impressum
EmberJs Grundlagen zu Models
EmberJs Grundlagen zu Models

EmberJs Grundlagen zu Models

posted on 16.09.2017

Inhaltsverzeichnis

  • Was sind Models in Ember?
  • Individualisierte Eigenschaften für Model Attribute
    • DS.Transform erstellen mit Ember-Cli
      • Zwei Methoden anwenden:
        • deserialize
        • serialize
      • Beispiel Anwendungsfall
        • Erklärung
          • Deserializer-Funktion
          • Serialized-Funktion
  • Beziehungen unter Models
    • Eins-zu-Eins Beziehung
    • Eins-zu-Viele Beziehung
    • Viele-zu-Viele Beziehung

Hallo lieber Leser,

in diesem Artikel geht es darum dir das Konzept von Ember Models zu erläutern.
Es ist zu empfehlen den Artikel von vorne bis hinten zu lesen, falls du neu bist.

Wichtig: Da Ember-Cli defakto Standard für EmberJs Entwicklung ist,
werden die Beispiel auf Basis dieses Kommandozeilen-Generator gezeigt.

https://woytec.de/wp-content/uploads/2016/12/Ember_Model.mp4

Was sind Models in Ember?

Models in Ember beschreiben die Daten, sie enthalten diese aber nicht. Stell dir die Models als eine Art Vorlage vor – du sagst Ember welche Datenstrukturen zu erwarten sind und gegebenenfalls in welcher Beziehung (hasMany, belongsTo) das Model (die Daten) zu einem anderen Model stehen. Diese Beziehungen werden aber in einem anderen Artikel erläutert.

Modelle sind essenzieller Bestandteil der Ember Logik, da mit ihnen alles steht und fällt.
Nur wenn die Anwendung weiß was Sie zu erwarten/verarbeiten hat, können die Abhängigkeiten richtig zugeordnet werden.

Beispiel Model Person
Wir erstellen nun ein Model für eine Person.

Das Model wir mit Ember-Cli mit folgenden Befehl in der Kommandozeile erstellt:

ember generate  return serialized;model Person

Daraufhin wird ein leeres Model erstellt, welches wir um Attribute erweitern.

Das fertige Model sieht dann wie folgt aus:

export default DS.Model.extend({  vorname: DS.attr('string'),  nachname: DS.attr('string),  istFrau:DS.attr('boolean', {defaultValue: true}),  alter:DS.attr('number')  geburtstag:DS.attr('date')  });

Standardmäßig können den Attributen die Eigenschaften:
string, boolean, date und number zugewiesen werden.

Jedes Attribut kann noch die Option defaultValue enthalten, dieser wird benutzt,
sollten bei der Übergabe der Daten für dieses Attribut kein Wert vorhanden sein.

Individualisierte Eigenschaften für Model Attribute

Sollten die Standartwerte wie oben beschrieben nicht ausreichen, kann mit Transforms eingehende und ausgehende Daten nach deinen Wünschen manipulieren werden.

DS.Transform erstellen mit Ember-Cli

ember generate transform gehalt  export default DS.Transform.extend({    deserialize(serialized) {     return serialized;   },    serialize(deserialized) {  	return deserialized;  } });


Zwei Methoden anwenden:

deserialize

Wird aufgerufen, wenn Daten von außerhalb übergeben werden. Die veränderten Werte werden dann auch auf der Client Site angezeigt.

serialize

Werden die Daten zum Beispiel Zwecks Update wieder an den Server geschickt, wird vor dem Übermitteln diese Funktion aufgerufen.
Diese Funktion wandelt die davor veränderten Daten wieder um.

Beispiel Anwendungsfall

Wir möchten jetzt für unsere Person Model eine neues Attribut Gehalt erstellen, das Gehalt soll auf der Client Seite mit einem € (Euro) Zeichen versehen werden.

Da die Zahlenwerte vom Server unformatiert übergeben werden, manipulieren wir die Daten mittels Transforms.

Das fertige Transform sieht wie folgt aus:

export default DS.Transform.extend({
  deserialize(serialized) 
   return serialized.concat(" €");
 },
serialize(deserialized) {
   return deserialized.replace("/ €/g", "");
 }
 });

Erklärung
Deserializer-Funktion

In der Deserializer-Funktion wird dem Zahlenwert ein €-Zeichen angehängt. Wegen der „lockeren“ JavaScript Typisierung ist es also möglich einen Attribut mit der Eigenschaft Number (serialized) und ein Attribut mit der Eigenschaft string (.concat(“ €“)) zu Verknüpfen. JavaScript wandelt dann diese zusammengesetzten Werte in einen String um.

Serialized-Funktion

Die Serialized-Funktion nimmt den veränderten Wert (aktuell mit dem €-Zeichen) und entfernt dieses wieder, und gibt dann nur die Zahl zurück.

 

Beziehungen unter Models

Mit Ember (genauer Ember-Data) können Models in Beziehung zueinander gesetzt werden.

Es gibt drei Beziehungstypen: Eins-zu-Eins, Eins-zu-Viele und Viele-zu-Viele.

Als Fallbeispiel nehmen wir wieder das Person Model von oben und fügen ein logisch verknüpftes Model Gehalt hinzu.
Diese beiden Models werden in Beziehung zueinander gesetzt.

Ein Mitarbeiter erhält (in vielen Fällen) nur ein Gehalt von einer Firma, und das Gehalt wird nur jeweils an einen Mitarbeiter ausgezahlt.

Das Person Model

export default DS.Model.extend({  vorname: DS.attr('string'),  nachname: DS.attr('string),  istFrau:DS.attr('boolean', {defaultValue: true}),  alter:DS.attr('number'),  geburtstag:DS.attr('date')
 });

Das Gehalt Model

export default DS.Model.extend({  gehalt: DS.attr('number'),  });

Eins-zu-Eins Beziehung

Um diese Art von Beziehungen abzubilden bieten Ember-data die Methode DS.belongsTo an.

DS.belongsTo verlangt ein String, welcher dem Namen des Model entspricht, in unserem Fall also Person.

Wir sagen also „Ein Gehalt“ gehört nur „Einer Person“.

//Gehalt Model
export default DS.Model.extend({  gehalt: DS.attr('number'),
 person: DS.belongsTo('person')  });

„Eine Person“ kann nur „ein Gehalt“ haben.

//Person Model
export default DS.Model.extend({   vorname: DS.attr('string'),
  nachname: DS.attr('string),
 gehalt:DS.belongsTo('gehalt'), .... // Hier steht dann der Rest der Attribute von oben... ;)  });

Eins-zu-Viele Beziehung

Um diese Art von Beziehungen abzubilden bieten Ember-data die Methode DS.belongsTo  im Kombination mit DS.hasMany an.

Das logische Prinzip des Person Model ändern wir zum besseren Verständnis in Mitarbeiter, fiktiv haben wir ein Gehalt Model was mehrere Mitarbeiter besitzen können.

In einer Firma bekommt jeder Mitarbeiter (außer die armen Praktikanten ;O) ein Gehalt, also hat das Model Gehalt eine Eins zu Viele Beziehung zum Mitarbeiter Model

DS.belongsTo verlangt ein String, welcher dem Namen des Model entspricht, in unserem Fall also Mitarbeiter (ehemals Person).

//Gehalt Model
export default DS.Model.extend({  gehalt: DS.attr('number'),
 mitarbeiter: DS.hasMany('mitarbeiter')  });
//Mitarbeiter
export default DS.Model.extend({   vorname: DS.attr('string'),
  nachname: DS.attr('string),
 gehalt:DS.belongsTo('gehalt'), .... // Hier steht dann der Rest der Attribute von oben... ;)  });

Viele-zu-Viele Beziehung

Um diese Art von Beziehungen abzubilden muss die Methode DS.hasMany() jeweils im Model stehen.

Zwecks Verständlichkeit werden wir hier die Models nochmal ändern.

Wir haben jetzt ein Model Bewerbung und Firma.

Die logische Verknüpfung soll heißen: Eine Firma kann mehrere Bewerbungen erhalten, Eine Bewerbung kann an mehrere Firmen geschickt werden.

Um das in einer Beziehung abzubilden, müssen beide Models die Methode DS.hasyMany() benutzen.

//Firma Model
export default DS.Model.extend({  name: DS.attr('number'),
 bewerbungen: DS.hasMany('bewerbung')  });
//Bewerbung Model
export default DS.Model.extend({   name: DS.attr('string'),
  firmen:DS.hasMany('firma')  });

 

G
M
T
Die Sound-Funktion ist auf 100 Zeichen begrenzt
Optionen : Geschichte : Hilfe : Feedback Schließen

Kategorie: Web Entwicklung Stichworte: Blog

Zum kostenlosen Newsletter anmelden

[wd_hustle id=“email“ type=“embedded“]

Über mich: Marcus Woyciechowski

Marcus Woy

Ich beschäftigte mich seit etwa 2005 mit dem Thema Digitale Marketing & Web Entwicklung. Es war mir schon immer ein Bedürfniss Online Marketing ganzheitlich als Online Marketer & Web Entwickler betrachten zu können. So kann das Beste aus beiden Welten benutzt werden. Das Schöne ist es, jeden Tag etwas Neues in dem Dschungel des WWW zu entdecken.

Lernen durch Lehren
ist der Eckpfeiler meiner Motivation.


Ich bin Freiburger und arbeite dort, wo andere Leute Urlaub machen. Nur betrachte ich es nicht als Arbeit. Es ist eher eine Leidenschaft, mit der ich zugleich auch Geld verdiene.

Mein Ziel ist es, Menschen/Ihnen/Euch dabei zu helfen, den Dschungel Online Marketing einfach(er) zu verstehen. Und ich freue mich über jeden, der meinen Newsletter abonniert.

Und wer von mir noch nicht genug hat, kann sich mein Profil ansehen.

Reader Interactions

Schreibe einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Haupt-Sidebar (Primary)

Suche

Neueste Beiträge

  • 🥰 100 Branchenbücher & Firmenverzeichnisse Liste zum Eintragen – ✓ geprüft, ✓ kostenlos, ✓ aktuell
  • Linux Grundkurs für Einsteiger
  • Mitarbeiterführung der Generation Y und Remote Leadership
  • Google Data Studio Changelog Neuerungen 2022
  • Hyper-V unter Windows 10 und 11 Home aktivieren

Kategorien

  • Administration (1)
  • Digital Analytics (2)
  • Downloads (4)
  • Linux (2)
  • Online Marketing (8)
  • Web Entwicklung (10)

Urheberrecht © 2025 · Academy Pro am Genesis Framework · WordPress · Anmelden