Ich möchte den Wert eines HTML-Elements <select>
reaktiv einstellen, ohne die verschiedenen Optionen für das Element zu ändern. Ich habe eine Lösung gefunden, aber es ist nicht elegant.Wert eines ausgewählten HTML-Elements reaktiv mit Meteor setzen
Um zu testen, eine Barebone-Meteor-App mit create meteor select
zu erstellen und den Inhalt der select.html und select.js Dateien wie folgt ändern:
select.html
<body>
{{> select}}
</body>
<template name="select">
<label for="select">{{category}}</label>
<select id="select">
<option value='' disabled selected style='display:none;'>Select...</option>
<option value="Animal">Animal</option>
<option value="Vegetable">Vegetable</option>
<option value="Mineral">Mineral</option>
</select>
</template>
select.js
if (Meteor.isClient) {
Session.set("category", "")
Session.set("label", "Category")
Template.select.onRendered(function() {
setSelectValue()
})
Template.select.helpers({
category: function() {
setSelectValue()
return Session.get("label")
}
});
function setSelectValue() {
var select = $("#select")[0]
if (select) {
select.value = Session.get("category")
}
}
}
Starten Sie jetzt Ihre App. In der Browser-Konsole können Sie den Wert der Variablen category
Session ändern:
Session.set("category", "Animal")
jedoch das select-Element wird nicht aktualisiert, bis Sie das Etikett ändern:
Session.set("label", "category") // was "Category'
Nun ist das select-Element-Updates, und jede nachfolgende Änderung wird die category
Sitzungsvariable auch das Auswahlelement aktualisieren.
Session.set("category", "Vegetable") // Now the select element updates
Ist es möglich, den gleichen Effekt direkt zu erreichen, ohne diese plumpe Workaround zu verwenden?