使用Meteor和Handlebars创建“组件”

时间:2013-06-17 12:08:39

标签: javascript twitter-bootstrap meteor handlebars.js

我在探索Meteor框架。我在Java EE / JavaServer Faces(JSF)方面有很多经验,但我是JavaScript开发的新手。我正在尝试创建格式正确的“水平形式”,如http://twitter.github.io/bootstrap/base-css.html#forms所述。我的问题是,这为每个输入字段提供了大量重复的HTML,这不是DRY ......

所以,我正在尝试在JSF 2.x中创建类似“复合组件”的构造。这意味着我正在寻找一种方法来调用Meteor-template并替换其中的一些值。

我的模板是这样的:

<template name="formField">
  <div class="control-group">
    <label class="control-label" for="{{this.id}}">{{this.label}}:</label>
    <div class="controls">
      {{this.formField}}
    </div>
  </div>
</template>

通过这样调用它,我能够让它部分工作:

{{> formField labels.x}}

我在这里定义了labels地图:

Template.myTemplate.labels = {
  "x": {id: 'idx', label: 'labelx'},
  "y": {id: 'idy', label: 'labely'},
  "z": {id: 'idz', label: 'labelz'}
}

问题当然是替换模板中的<input> - 元素。我尝试了各种方法来做到这一点,但有几个问题:

  • 我可以将<input> - 元素添加到我的formField - 模板中,但我无法将该value - 元素的<input>绑定到JavaScript的属性 - 正在编辑的对象。
  • 我可以创建一个返回<input> - 元素的函数,但最后我会在JavaScript源代码中使用标记代码。

另一个问题是我对Template.myTemplate.labels - 地图并不满意。这似乎是不可避免的,因为我无法使用任何文字值。如果我能够像这样调用模板那将是很好的:

{{> formField idx labelx}}
{{> formField idy labely}}
{{> formField idz labelz}}

总而言之,我基本上有一个问题:使用Meteor / Handlebars创建某种组件的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

表格在路线图上:

https://trello.com/card/easy-forms/508721606e02bb9d570016ae/8

但请特别查看以下讨论:

https://github.com/meteor/meteor/issues/1054(来自上述链接)。

至于在Meteor中创建组件,没有 方法,但您可能想要查看帐户包的工作方式,因为它非常孤立,可扩展,并且形式如下:

https://github.com/meteor/meteor/tree/master/packages