Метеор: используйте выпадающее меню, чтобы получить данные из mongodb и показать результаты

1

Я новичок в 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);
    }
});

Что я делаю неправильно?

  • 0
    Разве это не должно быть "change #plane-select" вместо "change #plane-form" ?
Теги:
meteor

1 ответ

1
Лучший ответ

Принимая во внимание, что вы можете выбрать 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 теряются при обновлении страницы.

  • 0
    Большое спасибо, так работает! Я также узнал, что я не могу просто войти в Session.set: я попробовал var test = Session.set(...) и console.log(test) но это не работает. И это на самом деле логически правильно. Вместо этого я tred var test = Session.get(...) и это записывается правильно.
  • 1
    Session.set("var", true) ==> означает, что вы присвоили true переменной сеанса с именем var . Если вы хотите получить значение var , вам нужно сделать Session.get("var") . Вы не можете установить var test = Session.set(...) . Это должно быть ``` var test = Session.get (...) `` `
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню