Meteor获取模板父级的ID

时间:2015-03-14 10:44:26

标签: meteor

我有两个Collection:一个包含B ID数组的集合A.

模板A:

<template name="templateA">
  Name : {{name}} - {{_id}}
  {{#each allBsOfThisA}}
      {{> Bdetail}}
  {{/each}}
  <a href="{{pathFor 'Bsubmit'}}">Add B for this A</a>
</template>

注意:在此模板A中,我列出了所有A及其详细信息。在A的底部,我推出了一个添加B的链接。

Bsubmit的模板:

  

<div class="form-group {{errorClass 'nameOfB'}}">
  <label class="control-label" for="nameOfB">nameOfB</label>
  <div class="controls">
      <input name="nameOfB" id="nameOfB" type="text" value="" placeholder="nameOfB" class="form-control"/>
      <span class="help-block">{{errorMessage 'nameOfB'}}</span>
  </div>
</div>

<input type="submit" value="Submit" class="btn btn-primary"/>

在Bsubmit脚本上:我想获得A的ID。我尝试使用 template.data._id ,但它无效:

Template.Bsubmit.events({'submit form': function(e, template) {
     e.preventDefault(); 
     console.log("template.data._id: " + template.data._id);
       var B = {
         name: $(e.target).find('[name=name]').val(),
         AId : template.data._id
       };   
  } 
});

编辑:

BSubmit的铁路由器部分:

Router.route('Bsubmit ', {name: 'Bsubmit '});

1 个答案:

答案 0 :(得分:1)

模板和路线都不知道其他模板/路线的A实例。

所以一个解决方案是将id传递给路由,这允许你直接获取实例或使用id:

模板:

<template name="templateA">
   Name : {{name}} - {{_id}}
   {{#each allBsOfThisA}}
      {{> Bdetail}}
   {{/each}}
   <a href="{{pathFor 'Bsubmit' _id=_id}}">Add B for this A</a>
</template>

路线:

More information about passing arguments to a route

Router.route('/Bsubmit/:_id', function () {
  var a = A.findOne({_id: this.params._id});
  this.render('Bsubmit', {data: a});
});

然后你可以在事件中使用template.data._id。

另一个解决方案是将表单嵌入到另一个视图中,这样您就可以访问其中的父模板的数据(documentation of parentData)。