Ich baue eine App mit Aurelia und wirklich gefallen das Framework so weit, aber ich bin auf ein Problem gestoßen, wo ich versuche, eine Liste von Kontrollkästchen, deren Werte sind Zahlen (ID: s in der Realität) und Aurelia scheint sie in Strings umzuwandeln und so schlägt der Vergleich fehl.Arbeiten mit Zahlen in Formularen
Ich habe im Grunde so etwas wie:
export class MyVm {
constructor() {
this.items = [
{name: 'Foo', id: 0},
{name: 'Bar', id: 1},
{name: 'Baz', id: 2}
];
this.selectedItems = [0, 2];
}
}
Und meiner Meinung nach:
<ul>
<li repeat.for="item of items">
<input type="checkbox" value.bind="item.id" checked.bind="selectedItems">
${item.name}
</li>
</ul>
Damit dies funktioniert, muss ich eigentlich this.selectedItems = ["0", "2"]
tun, die nur von anderen Vergleichs Probleme zu einem Bündel führt in mein eigener Code. Ich möchte auch nicht das ausgewählte Element als Zeichenfolge an den Server später beim Speichern der Daten senden.
Ich habe versucht, einen einfachen Wert-Konverter, die toString toview und parseInt fromView konvertiert, aber ich kann diesen Konverter auf dem Array von selectedItems nicht ausgeführt:
export class IntValueConverter {
toView (val) {
return val.toString();
}
fromView (val) {
return parseInt(val);
}
}
Wie würden Sie über die Lösung dieses gehen?
Oh Mann ich danke dir sehr! Können Sie erklären, warum ich 'model.bind' anstelle von' value.bind' verwenden muss? Ich mochte Aurelia sehr wegen seiner Einfachheit, im Grunde genommen, indem ich nur ".bind" zu jedem Attribut hinzufüge, an das man binden möchte, das fühlt sich etwas angularer an:/Btw: Das war "value =" $ {item.id} " eigentlich ein "Tippfehler" (ich habe 'value.bind' in meinem Code verwendet) – powerbuoy
Das value-Attribut des html-Eingabeelements wandelt alles in eine Zeichenkette um, so dass wir es irgendwo anders speichern müssen, um den wahren Wert zu erhalten –
In Ordnung :) Ich habe jetzt änderte ich alle meine 'value.bind': s zu' model.bind': s und es funktioniert wie ein Zauber. Allerdings änderte ich es auch an einem 'Eingang [type = Bereich]', der vollständig aufhörte zu arbeiten. Weißt du, warum es nicht für alle Eingänge gleich funktioniert? Liegt es daran, dass der Bereich bereits numerisch ist? – powerbuoy