Я новичок в Meteor, и мне нужно реализовать небольшое раскрывающееся меню и поиск с выбранными данными в выпадающем меню.
У меня есть devices.html
:
<div class="ha_panel-selections">
<form id="plane-form">
<select id="plane-select">
<option disabled="disabled" selected="selected">Please Select</option>
{{#each plane}}
<option id="plane_selected" value="{{this}}">{{this.planeid}}</option>
{{/each}}
</select>
</form>
</div>
данные поступают из базы данных: devices.js
:
Template.devices.helpers({
plane: function() {
return plane.find({});
}
});
Теперь я хочу сделать выбранное значение в раскрывающемся меню (значение plane.planeid
), plane.planeid
поиск в db для этого значения и распечатать связанные данные: например, если я выберу "plane1", я могу видеть самолет, время полета, имя пилота, ecc; если я перейду от "plane1" к "plane2", данные соответственно изменятся.
Как передать значение plane_selected
из html в device.js? и обратно, как только я найду данные в db, как я могу напечатать результаты, передающие форму данных devices.js
на devices.html
?
Я думаю, что это должно быть (в devices.js
) что-то вроде
Template.devices.events({
"change #plane-form": function (event, template) {
//console.log("event: " + util.inspect(event) );
//console.log("template: " + util.inspect(template) );
var selected = Session.get("plane_selected");
console.log("selected: " + selected);
}
});
Что я делаю неправильно?
Принимая во внимание, что вы можете выбрать planeid
, вы, planeid
, работаете в pub/sub. Все, что вам нужно, это еще один помощник, который возвращает вам остальную часть данных самолета.
devices.js
Template.devices.events({
"change #plane-select": function (event, template) {
var selected = event.target.value;
console.log("selected: " + selected);
Session.set("selectedPlane", selected);
}
});
Template.devices.helpers({
plane: function() {
return plane.find({});
},
planeData: function() {
return planes.findOne({
planeId: Session.get("selectedPlane")
});
}
});
devices.html
<p>
planeID: {{planeData.planeid}}
planeName: {{planeData.planeName}}
...
...
</p>
Примечание. Для вас нужно использовать Session
или reactive var
переменный. Переменные Session
теряются при обновлении страницы.
var test = Session.set(...)
и console.log(test)
но это не работает. И это на самом деле логически правильно. Вместо этого я tred var test = Session.get(...)
и это записывается правильно.
Session.set("var", true)
==> означает, что вы присвоили true переменной сеанса с именем var
. Если вы хотите получить значение var
, вам нужно сделать Session.get("var")
. Вы не можете установить var test = Session.set(...)
. Это должно быть ``` var test = Session.get (...) `` `
"change #plane-select"
вместо"change #plane-form"
?