【发布时间】:2013-12-05 19:44:04
【问题描述】:
为冗长的标题道歉。希望一些代码能让事情更清楚。
在开始之前,我使用的是 KnockoutJs 版本 3.0.0、bootstrap 3 和 jquery 1。 7.1。此问题与 KnockoutJS 有关。
我有以下 html,它根据我的底层 javascript 模型创建一个表单。
<form role="form" data-bind="foreach: { data: controls, as: 'control' }" >
<div class="form-group control-form-group" data-bind="attr:{class: $root.cssControlClassColumnWidth }, visible: control.isVisible">
<fieldset class="control-border" data-bind="
event:{
dragstart: function(control, event) { $root.dragStartControl($parent,control, event) },
dragover: function(control, event) { $root.dragOverControl(event) }
}">
<legend class="control-border">
<b data-bind="text: control.name"></b>
<span class="glyphicon glyphicon-remove-circle btn-control-remove text-danger" data-bind="visible: $root.inCustomisationMode,click: $root.removeControl"></span>
</legend>
<div class="form-inline" data-bind="foreach: {data: parameters, as: 'parameter'}">
<div class="form-group" >
<div data-bind="template: { name: parameter.template, data: parameter }"></div>
</div>
</div>
</fieldset>
</div>
</form>
这很好用。但是当我将代码更改为以下代码(添加无容器控件)时,我的内部 foreach 循环使用了由 parameter.template 值确定的模板。
<form role="form" data-bind="foreach: { data: controls, as: 'control' }" >
<!-- ko if:true -->
<div class="row">
<!-- /ko -->
<div class="form-group control-form-group" data-bind="attr:{class: $root.cssControlClassColumnWidth }, visible: control.isVisible">
<fieldset class="control-border" data-bind="
event:{
dragstart: function(control, event) { $root.dragStartControl($parent,control, event) },
dragover: function(control, event) { $root.dragOverControl(event) }
}">
<legend class="control-border">
<b data-bind="text: control.name"></b>
<span class="glyphicon glyphicon-remove-circle btn-control-remove text-danger" data-bind="visible: $root.inCustomisationMode,click: $root.removeControl"></span>
</legend>
<div class="form-inline" data-bind="foreach: {data: parameters, as: 'parameter'}">
<div class="form-group" >
<div data-bind="template: { name: parameter.template, data: parameter }"></div>
</div>
</div>
</fieldset>
</div>
<!-- ko if:true -->
</div>
<!-- /ko -->
</form>
如您所见,我要做的就是添加一行(我将添加一个变量,该变量将控制我在此工作后每行添加的表单组的数量)。这应该是微不足道的,但我的内部 foreach 似乎无法使用该模板(请参阅下面的示例模板)。
<script type="text/html" id="parameterComboBoxTemplate">
<label data-bind="text: name"></label>
<select class="input-sm" data-bind="options: values, value: selectedValue"></select>
</script>
希望有人能解释一下为什么我会看到这种奇怪的行为。
如果我可以添加任何其他内容来帮助确定问题,请告诉我。
【问题讨论】:
标签: javascript jquery twitter-bootstrap knockout.js