Meteor如何将变量传递给帮助器

时间:2017-02-19 20:26:02

标签: javascript jquery meteor

我正在尝试使用单选按钮过滤基于列表的集合,每次用户单击另一个单选按钮时,过滤后的集合应该更新。我已经获得了点击收音机的价值,但是找不到,因为我无法将变量传递给帮助者

我的客户js:

Template.NeuesEvent.events({
    "click .RadioButtonOnClick": function(event){       
        var variable = $('input[name="VersammlungRadio"]:checked').val();
        console.log(variable);

    }
});


Template.friendsScroll.helpers({
    friend: function(){
        return Friends.find({Field: variable});
    }
}); 

我感谢每一位帮助,谢谢你;)

2 个答案:

答案 0 :(得分:1)

您可以根据需要使用Session将变量传递给不同的模板

Template.NeuesEvent.events({
    "click .RadioButtonOnClick": function(event){       
        var variable = $('input[name="VersammlungRadio"]:checked').val();
        Session.set("variable",variable);

    }
});

Template.friendsScroll.helpers({
    friend: function(){
        return Friends.find({Field: Session.get("variable")});
    }
}); 

如果未安装会话包,请使用

进行安装
meteor add session

答案 1 :(得分:1)

在我看来,你应该避免使用Sessions,因为它们是在你的客户端应用程序中全局设置的。

在您的例子中,您使用两个不同的模板(NeuesEvent和friendsScroll)。是另一个模板的父模板吗?他们是兄弟姐妹吗?

如果问题是如何在 模板之间传递参数

// client/NeuesEvent.js
Template.NeuesEvent.helpers({
    dataToFriendScroll() {
       return {
         text: 'blahblah',
         randomBool: false,
       };
    },
});

// client/NeusEvent.html
<!-- beginning of the template -->
{{> friendsScroll dataToFriendScroll}}
<!-- end of the template -->

// client/friendScroll.js
Template.friendScroll.onCreated(function () {
  const self = this;

  // The data you want to get from the other template
  self.autorun(() => {
    const dataPassedInTemplate = Template.currentData();
    const textFromNeusEvent = dataPassedInTemplate.text;
    const randomBoolFromTheOtherTemplate = dataPassedInTemplate.randomBool;
  })
})

要在相同模板的帮助事件之间传递变量,您可以使用meteor reactive dict包:{{3} }

// client/neuesEvent.js

Template.neuesEvent.onCreated(function () {
  const self = this;

  self.state = new ReactiveDict();
  self.state.setDefault({
    radioButton: false,
  });
});


Template.neuesEvent.events({
  'click .RadioButtonOnClick': function (event, templateInstance) {
    const result = event.target.value;
    templateInstance.state.set('radioButton', result);
  },
});


Template.neuesEvent.helpers({
  result() {
    const instance = Template.instance();
    const resultButton = instance.state.get('radioButton');
    return resultButton;
  },
});