2016-05-15 15 views
0

Klingt wie eine einfache genug zu tun noch macht mir alle Arten von Trauer.Ember.js (2.5.0) Wie man verschachtelten Objektwert einstellt

ich ein einfaches server Modell habe, die ein paar verschachtelten Objekte haben,

export default DS.Model.extend({ 
    type: DS.attr('string'), 
    attributes: DS.attr(), 
    tasks: DS.attr() 
}); 

ich einen neuen Rekord in der Route erstellen kann mit

export default Ember.Route.extend({ 

    model() { 
     return this.store.createRecord('server'); 
    }, 

    actions: { 
     create(server) { 
      server.save().then(() => this.transitionTo('servers')); 
     } 
    } 
}); 

und in dem damit verbundenen .hbs Ich bin Festlegen einiger Eigenschaften von Attributen und Aufgaben unter Verwendung von value=model.attributes.name aus einem Formular zum Beispiel.

Das alles funktioniert gut. Ich möchte jedoch einige weitere Eigenschaften von der Route hinzufügen, während create wie Standardwerte.

Die Verwendung von server.set('attributes.size', 'large'); funktioniert nicht, da Ember noch nicht über Größe weiß, da es ein neuer Rekord ist.

Ich kann setProperties verwenden, aber dies scheint

server.setProperties({ 
    attributes: { 
     size: "large" 
    }, 
     tasks: { 
      create: true 
    } 
}); 
jeden anderen Wert auszulöschen

size jetzt richtig eingestellt ist, ist jedoch Name jetzt null, weil ich es nicht in den setProperties angegeben haben ...

Was ist der richtige Weg, um dies zu tun? Sicherlich muss ich nicht alle Eigenschaften in setProperties abbilden? Das scheint verschwenderisch und sehr fehleranfällig.

Etwas, was ich dachte, ist sollte Attribute sein eigenes Modell sein und eine Beziehung mit Server haben? Obwohl dies immer eine 1: 1 und 1: 1 Beziehung ist?

Antwort

0

Ich würde in diesem Fall empfehlen, ember-data-model-fragments Addon als eine Lösung zu verwenden.

https://github.com/lytics/ember-data-model-fragments

Andere Option ein separates Modell für Attribute verwenden und eine 1-zu-1-Beziehung aufzubauen. Beide wären belongsTo, aber es hängt auch von Ihrer Datenbank und API ab, also müssen Sie Ihr Backend-System ausrichten, um mit dieser neuen Struktur übereinzustimmen.

Verwandte Themen