我正在探索 Meteor 框架。我在 Java EE / JavaServer Faces (JSF) 方面有很多经验,但我是 JavaScript 开发的新手。我正在尝试创建一个格式良好的“水平表单”,如http://twitter.github.io/bootstrap/base-css.html#forms中所述。我的问题是,这为每个输入字段提供了很多重复的 HTML,这不是 DRY ...
所以,我试图在 JSF 2.x 中创建一个类似“复合组件”的结构。这意味着我正在寻找一种方法来调用 Meteor 模板并替换其中的一些值。
我的模板是这样的:
<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>
模板中的 - 元素。我尝试了各种方法来做到这一点,但有几个问题:
- 我可以将-element 添加
<input>
到我的formField
-template 中,但是我无法将该 -element 的 绑定value
到<input>
正在表单中编辑的 JavaScript 对象的属性。 - 我可以创建一个返回
<input>
-element 的函数,但我最终会在我的 JavaScript 源中使用标记代码。
另一个问题是我对Template.myTemplate.labels
-map 不是很满意。这似乎是不可避免的,因为我无法使用任何文字值。如果我能够像这样调用模板会很好:
{{> formField idx labelx}}
{{> formField idy labely}}
{{> formField idz labelz}}
最后,我基本上有一个问题:用 Meteor/Handlebars 创建某种组件的最佳方法是什么?