Model view controller 如何使用knockout.js实现通用CRUD网格?
我有一个非常好的网格,具有创建、检索、编辑和删除功能。我在客户端使用knockout.js,在后端使用WebAPI 我想把它扩展到许多不同的对象。本质上,我有一个列表,其中T是一个MVC视图模型,淘汰视图和视图模型应该能够根据T计算出它们应该是什么样子 是否有人知道一种简单的方法可以以网格格式显示任何viewmodel(带有基于viewmodel本身的特定编辑控件-例如日期选择器、字符串输入、下拉列表等),并具有通用CRUD函数 下面是我正在使用的退出HTML的示例(针对特定对象):Model view controller 如何使用knockout.js实现通用CRUD网格?,model-view-controller,knockout.js,asp.net-web-api,Model View Controller,Knockout.js,Asp.net Web Api,我有一个非常好的网格,具有创建、检索、编辑和删除功能。我在客户端使用knockout.js,在后端使用WebAPI 我想把它扩展到许多不同的对象。本质上,我有一个列表,其中T是一个MVC视图模型,淘汰视图和视图模型应该能够根据T计算出它们应该是什么样子 是否有人知道一种简单的方法可以以网格格式显示任何viewmodel(带有基于viewmodel本身的特定编辑控件-例如日期选择器、字符串输入、下拉列表等),并具有通用CRUD函数 下面是我正在使用的退出HTML的示例(针对特定对象): 起息日
起息日
职位日期
书
通货
货币基础
数量1
数量2
职位类型
模板如下所示:
<script id="itemsTmpl" type="text/html">
<tr>
<td data-bind="text: valueDate.formattedDate"></td>
<td data-bind="text: positionDate.formattedDate"></td>
<td data-bind="text: book"></td>
<td data-bind="text: currency"></td>
<td data-bind="text: currencyBase"></td>
<td data-bind="text: amount1"></td>
<td data-bind="text: amount2"></td>
<td data-bind="text: positionType"></td>
<td class="buttons">
<a class="btn" data-bind="click: $root.edit" href="#" title="edit"><i class="icon-pencil"></i></a>
<a class="btn" data-bind="click: $root.remove" href="#" title="remove"><i class="icon-trash"></i></a>
</td>
</tr>
</script>
<script id="editTmpl" type="text/html">
<tr>
<td><input data-bind="datepicker: valueDate.formattedDate, datepickerOptions: { dateFormat: 'yy/mm/dd' }"/></td>
<td><input data-bind="datepicker: positionDate.formattedDate, datepickerOptions: { dateFormat: 'yy/mm/dd' }"/></td>
<td><input data-bind="value: book"/></td>
<td><input data-bind="value: currency"/></td>
<td><input data-bind="value: currencyBase"/></td>
<td><input data-bind="value: amount1"/></td>
<td><input data-bind="value: amount2"/></td>
<td><input data-bind="value: positionType"/></td>
<td class="buttons">
<a class="btn btn-success" data-bind="click: $root.save" href="#" title="save"><i class="icon-ok"></i></a>
<a class="btn" data-bind="click: $root.cancel" href="#" title="cancel"><i class="icon-remove"></i></a>
</td>
</tr>
</script>
我希望视图和视图模型是通用的,而不是像上面那样“硬编码”。我确信一定有其他人做过类似的事情。一个解决方案是:
所以GET/api/customers将返回customers,但如果您请求text/knockout模板+html,那么您将返回一个作为字符串的knockout模板,然后将其附加到DIV和wireup knockout所以服务器可以使用反射生成模板,或者为某些型号定制模板。谢谢您的帮助-希望有人已经完成了类似的工作。如果没有,我会这样做,并把一个链接回到这个问题。我更喜欢选项2——如果我找不到任何东西,我会在接下来的几天里花一些时间在这上面else@loilo:请注意这一点,以防您感兴趣(请参考您以前的服务器/客户端模板问题):-)
<script id="itemsTmpl" type="text/html">
<tr>
<td data-bind="text: valueDate.formattedDate"></td>
<td data-bind="text: positionDate.formattedDate"></td>
<td data-bind="text: book"></td>
<td data-bind="text: currency"></td>
<td data-bind="text: currencyBase"></td>
<td data-bind="text: amount1"></td>
<td data-bind="text: amount2"></td>
<td data-bind="text: positionType"></td>
<td class="buttons">
<a class="btn" data-bind="click: $root.edit" href="#" title="edit"><i class="icon-pencil"></i></a>
<a class="btn" data-bind="click: $root.remove" href="#" title="remove"><i class="icon-trash"></i></a>
</td>
</tr>
</script>
<script id="editTmpl" type="text/html">
<tr>
<td><input data-bind="datepicker: valueDate.formattedDate, datepickerOptions: { dateFormat: 'yy/mm/dd' }"/></td>
<td><input data-bind="datepicker: positionDate.formattedDate, datepickerOptions: { dateFormat: 'yy/mm/dd' }"/></td>
<td><input data-bind="value: book"/></td>
<td><input data-bind="value: currency"/></td>
<td><input data-bind="value: currencyBase"/></td>
<td><input data-bind="value: amount1"/></td>
<td><input data-bind="value: amount2"/></td>
<td><input data-bind="value: positionType"/></td>
<td class="buttons">
<a class="btn btn-success" data-bind="click: $root.save" href="#" title="save"><i class="icon-ok"></i></a>
<a class="btn" data-bind="click: $root.cancel" href="#" title="cancel"><i class="icon-remove"></i></a>
</td>
</tr>
</script>