如何将变量传递给帮助器并在模板中显示?

时间:2017-12-11 10:43:46

标签: javascript html templates meteor

我想收集从模板中收集的变量(user _id),并使用session将其传递给另一个模板。然后我想显示这个变量。 实际上它似乎在变量的集合和传递到另一个模板,但我无法在第二个模板中显示用户的信息......

这是我的代码:

HTML

<template name="main"><!--Template 1-->
    <table>
        <tr>
            <th>Patient</th>
        </tr>
        {{#each allUsers}}
        <tr>
            <th><label><input type="radio" class="selected" name="patient" value="{{this._id}}"><i class="fa fa-user"></i> {{this.profile.lastName}} {{this.profile.firstName}}</label></th>
        </tr>
        {{/each}}
    </table>

   {{>test}}
</template>

<template name="test"> <!--Template 2-->
   <p>Name is <button class="test" name="patient" value="{{this._id}}">Test</button></p>
   <div name="show">Name: {{this.profile.firstName}}</div>
</template>

JS

Template.main.events({
'click .selected': function (){
var selPat = $('input[name="patient"]:checked').val();
Session.set("selPat",selPat);
console.log("collect", selPat);
}
});

Template.test.events({
    'click .test': function(){
        var PAT= Meteor.users.findOne({ _id: Session.get("selPat")});
        console.log("pass", PAT);
        return PAT;
    }

});
Template.patients.helpers({
   allUsers: function() {
       return Meteor.users.find({});
   }
});

我想在模板2中显示模板1中所选用户的名字{{this.profile.firstName}}

1 个答案:

答案 0 :(得分:0)

我相信这就是你在做的事情:

  1. 您是通过主模板中的单选按钮从患者列表中选择患者的ID。 [这个实现是正确的]
  2. 您正在主模板事件中的会话中设置患者ID。 [这个实现是正确的]
  3. 当您点击&#34;测试&#34;在测试模板中的按钮,它应该在按钮下面的div中显示用户的第一个名字。 [...不完全]
  4. 您无法在<div name="show">Name: {{this.profile.firstName}}</div>中显示任何内容,因为您没有相关帮助者为该模板提供该信息。

    虽然点击按钮显示患者在测试模板中的firstName听起来有点多余,但我确信你有理由这样做。

    我建议你将div包装在if block内。单击按钮时if条件呈现true,因此显示div元素。

    <template name="test"> <!--Template 2-->
       <p>Name is <button class="test" name="patient" value="{{this._id}}">Test</button></p>
    
    {{#if isButtonClicked}}
       <div name="show">Name: {{data.profile.firstName}}</div>
    {{/if}}
    
    </template>
    

    您的助手和事件将如此:

    Template.test.events({
        'click .test': function(){
          // set this session to true when the button has been clicked.
          Session.set("testClicked", true);
    
         }
    });
    
    Template.test.helpers({
         isButtonClicked: function(){
          // return the if block's validation.
          return Session.get("testClicked");
         },
    
         data: function(){
            // return the actual user data retrieved from the collection.
            var PAT= Meteor.users.findOne({ _id: Session.get("selPat")});
            console.log("pass", PAT);
            return PAT;
    });
    

    注意: 当您从单选按钮列表中选择不同的患者时,您可能希望确保div不会保持打开状态。不这样做会使您在第一次单击按钮时显示div,并且在您刷新页面之前保持打开状态,即使您选择其他患者也是如此。 您可以在testClicked - &gt;中将false设置为undefinedTemplate.main.events'click .selected'