我目前有一个表格,将让用户添加项目的提交,因为我是非常新的KnockoutJS我只是做了这个表格接受一个产品的提交
<script type="text/html" id="page4-template">
<h4>Strain Information : </h4>
<table>
<tr>
<td class="firstCol">Stock number : </td>
<td><span id="SummaryP1_StockNum" data-bind="text: stockNumber"></span></td>
</tr>
<tr>
<td class="firstCol">Product Needed : </td>
<td>
<span id="SummaryP1_pdtNeeded" data-bind="text: pdtNeeded"></span>
<span data-bind="visible: pdtNeeded() == 'Other'">
<span id="SummaryP1_pdtNeededPleaseExplain" data-bind="text: pdtNeededPleaseExplain"></span>
</span>
</td>
</tr>
<tr>
<td class="firstCol">Requested Ship Date : </td>
<td><span id="SummaryP1_RequestedShipDate" data-bind="text: requestedShipDate"></span></td>
</tr>
<tr>
<td class="firstCol">Aditional Information : </td>
<td><span id="SummaryP1_AdditionalInformation" data-bind="text: additionalInformation"></span></td>
</tr>
</table>
<hr>
</script>
如果我需要让这个表单允许用户动态添加更多的项目到提交,我应该在这里使用什么,我有点困惑,因为你是动态自举,Overservable数组和所有。谁能请建议我可以做什么简单,以允许用户动态添加项目。
2条答案
按热度按时间xdyibdwo1#
我建议采取三个步骤:
第一步是将绑定到表元素的所有可观察属性收集到一个对象中:
您将获得一个新
rowItem
的示例...第二步是在现有的视图模型中创建一个
observableArray
(documentation):要用
rowItem
示例的集合填充该数组,您 * 可以 * 调用self.rowItems.push(newRowItem)
(文件)但取得内部数组的指涉会更有效率(* 即 * observableArray正在监视的基元数组),将新示例添加到该数组中,然后告诉observableArray它的数据已经被更新了。[这种效率的原因与Knockout的内部工作方式和跟踪突变有关。]我的建议是在视图模型的公共函数中执行此操作:
最后一步是将您的
<tr>
元素 Package 在foreach
绑定(documentation)中:91zkwejq2#
你确实需要使用
observableArray
来存储多个条目,然后用foreach
绑定循环遍历这个数组,并在视图模型上添加一个方法来将新条目推送到这个数组中。大概是这样的:
小提琴:https://jsfiddle.net/thebluenile/2q8tbp5n/
为了更好地衡量,我还添加了一个如何删除行的示例。