如何在meteor js中使用模板助手?

时间:2017-12-05 13:01:48

标签: mongodb meteor iron-router

我正在开发一个项目,需要从url获取参数并将其插入mongodb.I我正在使用下面的代码,这是有效但仍然有些愚蠢的问题导致问题。 下面是main.js代码:

import { Template } from 'meteor/templating';
import { Dbs } from '../lib/collects.js';
import './main.html';


Router.route('/temp1/:ppid', function () {
this.render('temp1', {
data: function () 
{
var rpms = this.params.query.rpms;
return Dbs.findOne({patient_id:this.params.ppid});    
}
});
});

Template.temp1.helpers({
  'tempr': function() {
    var p=Router.current().params.ppid;
    var path1=Router.current().params.query.path;
    var doc_id1 =Router.current().params.query.docid;
    var temp1 = Router.current().params.query.temp;
    var age1 = Router.current().params.query.age;
    var gender1= Router.current().params.query.gender;
    var height1= Router.current().params.query.height;
    var weight1= Router.current().params.query.weight;
    var tempr= Router.current().params.query.tempr;
 Meteor.call('dbs.update',p,doc_id1,path1,temp1,age1,gender1,height1,weight1,tempr); 
 }   
});

Below is main.html code:
<head>
  <title>project1</title>

   <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
</head>

<body>
  <nav class="#c5cae9 indigo lighten-4">
  <div class="container">
  <div class="nav-wrapper">
   <a href="#" class="brand-logo">A3RMT</a>
   <ul id="nav-mobile" class="right hide-on-med-and-down">
</ul>
</div>
</div>
</nav>
<div class="row">
<div class="col s2">
</div>
</div>
</body>

<template name="a3">
<div class="row">
      <div class="col s2">
        <h4 class="black-text text-darken-4">INFORMATION</h4>
      <table class="centered">
      <form class="sub">
       <tr>
        <td><th>Doc_ID</th>{{doc_id}}</td>
        <td><th>tempr</th>{{tempr}}</td>
        <td><th>temp</th>{{temp}}</td>
      </tr>

      <tr>
        <td><th>Path</th>{{path}}</td>
        <td><th>age</th>{{age}}</td>
        <td><th>gender</th>{{gendert}}</td>
        <td><th>weight</th>{{weight}}</td>
        <td><th>Height</th>{{height}}</td>
      </tr>
</form></table></div></div>

</template>

上面的代码工作正常,但唯一的问题是代码行:&#34;&#39; tempr&#39 ;: function()&#34;。当我从url插入新参数时,其值存储在数据库中,甚至在我更新时更新,但它不显示&#34; tempr&#34;从database.And如果我改变&#39;:function()到&#39; abc&#39;:function()我无法更新或插入任何数据库。我不明白我想用什么

Template.temp1.helpers({
      'tempr': function() { 

请有人帮我解决这个问题。我如何使用模板助手 我需要在&#34; tempr&#34;的地方指定什么?在 Template.temp1.helpers({&#39; tempr&#39 ;: function()

1 个答案:

答案 0 :(得分:1)

帮助程序用于处理数据并动态地将其提供给html。页面加载时模板会多次运行。在您的情况下,当页面加载时,dbs.update将被反复调用多次。理想情况下,任何方法调用都应该出现在事件中。例如。提交表单时,请更新数据库。如果您希望每次加载页面时都进行更新,请将其放入onRendered()方法中。

可能的解决方案:

Templates.<<template_name>>.events({

// on submit of a form or something similar


    var p=Router.current().params.ppid;
    var path1=Router.current().params.query.path;
    var doc_id1 =Router.current().params.query.docid;
    var temp1 = Router.current().params.query.temp;
    var age1 = Router.current().params.query.age;
    var gender1= Router.current().params.query.gender;
    var height1= Router.current().params.query.height;
    var weight1= Router.current().params.query.weight;
    var tempr= Router.current().params.query.tempr;
 Meteor.call('dbs.update',p,doc_id1,path1,temp1,age1,gender1,height1,weight1,tempr); 

})