传递 Collection ID 以在 Meteor 中生成表单

Passing Collection ID to generate Forms in Meteor

我有一个 collection "Country",它显示国家列表及其信息。图书选项将用户引导至 "Activity" 表单,该表单具有“收件人”、“发件人”等下拉字段。如何传递 "Country" ID,使 "Activity" 中的表单域属于用户单击其 Book 按钮的 "Country"。我想我应该使用反应性变量来存储国家 ID,然后执行操作以相应地更改表单字段。我对此还很陌生,不胜感激。

activity collection 的提交代码是:

    Template.activitySubmit.onRendered(function () {
    if (Session.get("submit-bypass") === true) {
        Session.set("submit-bypass", false);
        window.history.back();
    }

    $("#activity-goal").material_select();
});

Template.activitySubmit.events({
    "submit form": function (e) {
        e.preventDefault();

        var title = $(e.target).find("#activity-title").val()
        if (title.length === 0) {
            throwError("You must have a title.");
            $("activity-title").focus();
            return;
        }

        var activty = {
            title: title,
            goal: parseInt($(e.target).find("#activity-goal").val())
        };

        Meteor.call("activityInsert", activty, function (error, result) {
            if (error) {
                throwError(error.reason);
                return;
            }

            Session.set("submit-bypass", true);
            Router.go("activityPage", { _id: result._id });
        });
    }
});

这就是你应该如何使用反应式 var 包

  1. 将包添加到您的项目,在终端 meteor add reactive-var
  2. 打开模板的 JS 文件,如 activitySubmit.js
  3. 像这样声明反应变量 Template.activitySubmit.onRendered(function () { this.selectedCountry = new ReactiveVar(null); });
  4. 然后根据需要更新反应变量并使用它

`

Template.activitySubmit.events({
      'change #country': function(e){
         var country = $(e.target).val()
         var instance = Template.instance();
         instance.selectedCountry.set(country);
      },


  'submit form': function (e) {
     ....
      var instance = Template.instance();
      var country = instance.selectedCountry.get(country);
     ....
  }

});`
  1. 如果您想跨多个文件(全局)传递数据,您可以简单地使用 Session。 Session.set('myId', id)Session.get('myId')