要素のさまざまなオプションを変更せずに、HTML <select>
要素の値を反応的に設定したいとします。私は解決策を見つけましたが、それは優雅ではありません。 、テストcreate meteor select
とベアボーン流星アプリを作成し、次へselect.htmlの内容とselect.jsファイルを変更するにはMeteorと反応して選択HTML要素の値を設定する
:
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.set("category", "Animal")
ラベルを変更するまでしかし、select要素は更新されません。
Session.set("label", "category") // was "Category'
今select要素の更新を、それ以降の変更はセッション変数category
もselect要素を更新します。
Session.set("category", "Vegetable") // Now the select element updates
この不器用な回避策を使用せずに、同じ効果を直接達成することはできますか?