Knockout.js 将属性绑定到html模板以减少html代码
我有一个可以观察到的敲除,有一大堆属性。我现在有很多重复的html,除了属性名之外基本上是一样的。有没有什么方法可以将for/in的等效项与敲除模板一起使用 我有许多字段(大约20个)希望以引导形式显示,因此每个字段都将使用以下html:Knockout.js 将属性绑定到html模板以减少html代码,knockout.js,Knockout.js,我有一个可以观察到的敲除,有一大堆属性。我现在有很多重复的html,除了属性名之外基本上是一样的。有没有什么方法可以将for/in的等效项与敲除模板一起使用 我有许多字段(大约20个)希望以引导形式显示,因此每个字段都将使用以下html: <div class="form-group"> <label data-bind="text: $parent.locale.fields.XYZ" for="XYZ" class="col-sm-3 control-label n
<div class="form-group">
<label data-bind="text: $parent.locale.fields.XYZ" for="XYZ" class="col-sm-3 control-label no-padding-right"></label>
<div class="col-sm-9">
<input data-bind="value: XYZ" type="text" name="XYZ" class="col-xs-10 col-sm-5" />
</div>
</div>
其中XYZ是字段的名称。是否有任何方法可以循环遍历每个属性,从而不必为每个字段重复html代码
下面是一个小提琴的例子:。请注意,我的字段实际上不是field1、field2等,因此我不能使用数字循环。您可以使用(仅IE9+)获取给定对象的属性名称
然后您可以在foreach
中使用它,在这里您可以使用$data
访问属性名称,并使用数组索引器语法访问您的可观察对象:
<form data-bind="foreach: Object.keys(data())" role="form">
<div class="form-group">
<label data-bind="text: $parent.locale.fields[$data],
attr: { for: [$data] }"
class="col-sm-3 control-label no-padding-right"></label>
<div class="col-sm-9">
<input data-bind="value: $parent.data()[$data],
attr: { name: [$data] }"
type="text" class="col-xs-10 col-sm-5" />
</div>
</div>
</form>
演示
在生产环境中,您可能不希望直接在绑定中使用
Object.keys
,但您可以在viewmodel中生成属性名称数组(您也可以排除某些属性等)。您正在寻找类似的内容吗?好极了,差不多就是这样。编辑小提琴以执行for=和name=属性()。你能添加这个作为答案吗?谢谢-关于使用属性名数组的好主意。这意味着我可以将表单仅限于某些字段(例如,不包括标题)。更新小提琴: