由父级控制的嵌套Meteor(Blaze)模板

时间:2014-09-10 19:50:06

标签: meteor meteor-blaze spacebars

我试图避免在创建或编辑新项目时避免使用重复的模板代码。

例如,像这样:

<template name="createOrEdit">

   <form role="form">

      <div class="form-group">
         <input type="text" class="form-control" id="title" placeholder="Title"/ value="{{title}}">
      </div>

      <button type="submit" class="btn btn-default">Submit</button>

   </form>

</template>

<template name="create">   
  {{> createOrEdit}}
</template>

<template name="edit">   
  {{> createOrEdit}}
</template>

然后,我可以创建单独的模板处理程序:

Template.create.events(...
Template.edit.events(...

但是,这些父模板包装器无法获取主子模板的事件。

有办法做我想做的事吗?

1 个答案:

答案 0 :(得分:2)

这些父模板可以从子模板中获取事件。像这样使用它:

Template.create.events({
  'click .btn':function(){

  }
})

Template.edit.events({
  'click .btn':function(){

  }
})

Template.createOrEdit.events对象中,您可以保留两个模板以及每个模板的Template.edit.eventsTemplate.create.events特定代码所使用的事件。

see proofsource code

这种方法非常好,因为您可以通过传递一些变量来自定义表单:

{{# create btnText="create" }}{{/create}}
{{# edit btnText="update" }}{{/edit}}

createOrEdit模板中,您可以使用变量btnText来更改按钮的标签。