Knockout.js 具有敲除的字段的动态绑定
请参见我创建的以下示例。 在本例中,“津贴”模型包含各种属性。在这些属性中,对于特定的容差,屏幕上显示的属性包含在“字段”数组中 在下面的HTML代码中Knockout.js 具有敲除的字段的动态绑定,knockout.js,Knockout.js,请参见我创建的以下示例。 在本例中,“津贴”模型包含各种属性。在这些属性中,对于特定的容差,屏幕上显示的属性包含在“字段”数组中 在下面的HTML代码中 <div data-bind="foreach : allowanceList"> <div style="display : block; width : 100%"> <span data-bind="text : allowanceTitle"></span> </d
<div data-bind="foreach : allowanceList">
<div style="display : block; width : 100%">
<span data-bind="text : allowanceTitle"></span>
</div>
<div style="margin-left : 20px" data-bind="foreach : fields">
<div style="display : block; width : 100%">
<label data-bind="text : title"></label>
<!-- ko if : typeOfField() == "input"-->
<input data-bind="value : '$parentContext.' + allowanceVariable() " />
<!-- /ko -->
</div>
</div>
<br/>
</div>
我想将
绑定到allowanceList对象的属性,该对象的名称包含在'fields'
数组的'allowanceVariable'
变量的值中
例如,对于allowanceList
的第一次迭代和字段的第一次迭代,allowanceVariable()
的值为“小时”。
因此,对于这个迭代,我想将
绑定到allowanceList的当前对象的'hours'字段
从小提琴中可以看出,目前,knockout只将$parentContext.hours复制到输入中
如何实现所需的结果?通过使用模型内部的函数,可以实现所需的结果。
下面是演示答案的小提琴
在这里,我调用了内部for循环和
我已将$parent
对象传递给它
在函数中,我检查了allowanceVariable
的值,并相应地返回了allowanceVariable
模型对应变量的值
如果适用,请建议其他更好的解决方案,因为在此解决方案中,我必须在dynamicValue
函数中对allowment
模型的属性名称进行硬编码,但这肯定解决了我的问题。在您的回答中,您正在对allowanceVariable
s进行硬编码,并使用if-else链分别检查它们。对于添加的每个属性,都必须更新if-else
块。它可以工作,但它们不再是动态的字段
相反,像这样:
<div data-bind="foreach: { data: allowanceList, as: '_allowance'}">
<div style="display : block; width : 100%">
<span data-bind="text : allowanceTitle"></span>
</div>
<div style="margin-left : 20px" data-bind="foreach: { data: _allowance.fields, as: '_field'}">
<div style="display : block; width : 100%">
<label data-bind="text : title"></label>
<!-- ko if : typeOfField() == "input"-->
<input data-bind="value : _allowance[_field.allowanceVariable()]" />
<!-- /ko -->
</div>
</div>
</div>
<div data-bind="foreach : allowanceList">
<div style="display : block; width : 100%">
<span data-bind="text : allowanceTitle"></span>
</div>
<div style="margin-left : 20px; display : block; width : 100%" data-bind="foreach : fields">
<div style="display : block; width : 100%">
<label data-bind="text : title"></label>
<!-- ko if : typeOfField() == "input"-->
<input data-bind="value : $parent[$data.allowanceVariable()]" />
<!-- /ko -->
</div>
</div>
<br/>
</div>
但是,我认为前一种方法更干净,也更容易理解。顺便说一句,制作整洁小提琴的好东西:)这正是我想要的。谢谢