Искам да задам стойността на HTML <select>
елемент реактивно, без да променям различните опции за елемента. Намерих решение, но не е елегантно.
За да тествате, създайте barebones приложение Meteor с create meteor select
и променете съдържанието на файловете select.html и select.js на следното:
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")
}
}
}
Сега стартирайте приложението си. В конзолата на браузъра можете да промените стойността на променливата category
Session:
Session.set("category", "Animal")
Въпреки това избраният елемент няма да се актуализира, докато не промените етикета:
Session.set("label", "category") // was "Category'
Сега избраният елемент се актуализира и всяка последваща промяна на променливата category
Session също ще актуализира избрания елемент.
Session.set("category", "Vegetable") // Now the select element updates
Възможно ли е да постигнете същия ефект директно, без да използвате това тромаво решение?