ich versucht habe, Details von Brenna O'Brien ‚s <select>
ing Good Ember Patterns in ein Projekt Ember Conf 2016 Gespräch zu übernehmen und es funktioniert für einfache Attribute (im Beispiel unten names
ist ein Array von Strings und model.name
ist ein attr("string")
):aktualisieren belongsTo Beziehung über native select-Element
<select onchange={{action (mut model.name) value="target.value"}}>
{{#each names as |name|}}
<option value={{name}} selected={{eq name model.name}}>{{name}}</option>
{{/each}}
</select>
wenn jedoch diese Beziehung auf eine belongsTo
angelegt wird, und eine Reihe von Modellen:
Regler:
import Ember from 'ember';
export default Ember.Controller.extend({
titles: null,
init(){
this.set("titles", this.store.peekAll("title"));
}
});
Vorlage:
<select onchange={{action (mut model.title) value="target.value"}}>
{{#each titles as |title|}}
<option value={{title}} selected={{eq title.id model.title.id}}>
{{title.description}}
</option>
{{/each}}
</select>
Dies scheitert; Der Beziehungswert ist geändert, aber er ist nicht auf einen gültigen Titel festgelegt. Aus einer Analyse scheint, dass das title
-Modell entweder angegeben wird, wenn es von HTMLBars behandelt wird, oder wenn es als option.value
festgelegt ist, und das (nicht?) Wird zurück konvertiert, wenn die Beziehung festgelegt ist.
Ich habe zur Zeit löste es (Ember-Twiddle) durch eine Aktion der Steuerung hinzu:
actions: {
title(id){
this.set('model.title', this.store.peekRecord("title", id));
}
}
und Modifizieren der Vorlage dieses zu nennen:
<select onchange={{action "title" value="target.value"}}>
{{#each titles as |title|}}
<option value={{title.id}} selected={{eq title.id model.title.id}}>
{{title.description}}
</option>
{{/each}}
</select>
Allerdings muss ich dann ein erstellen Funktion für jede Beziehung, die ich auf diese Weise aktualisieren möchte.
Gibt es eine Möglichkeit, eine belongsTo
Beziehung direkt aus der Vorlage festzulegen, ohne eine Zwischenfunktion aufzurufen oder auf Add-Ons zurückzugreifen? (Wenn nicht, dann ist es ein trockenes Verfahren, dies zu lösen?)