Jquery 敲除-如何在绑定时检查循环中的项是否存在

Jquery 敲除-如何在绑定时检查循环中的项是否存在,jquery,knockout.js,Jquery,Knockout.js,我在下面的HTML中使用foreach数据绑定来绑定数组 <table> <tr> <th>index</th> <th>fajr</th> <th>zuhr</th> <th>asr</th> <th>maghrib</th> <th>isha</th> </tr> &

我在下面的HTML中使用foreach数据绑定来绑定数组

<table>
<tr>
    <th>index</th>
    <th>fajr</th>
    <th>zuhr</th>
    <th>asr</th>
    <th>maghrib</th>
    <th>isha</th>
</tr>
<tbody data-bind="foreach: prayerData">
    <tr>
        <td data-bind="text: index"></td>  <!-- Display the current row -->
        <td data-bind="text: fajr"></td>
        <td data-bind="text: zuhr"></td>
        <td data-bind="text: asr"></td>
        <td data-bind="text: maghrib"></td>
        <td data-bind="text: isha"></td>
    </tr>
</tbody>
</table>
在绑定foreach绑定中的任何项之前,首先要检查数组中的该项是否存在。像下面这样-

例如,如果dataFromServer[0]看起来像下面这样,缺少“asr”和“fajr”,那么在绑定时会出现错误

"1": {    
"isha": "21:31",
"maghrib": "19:02",
"zuhr": "12:21"
},

相同的JSFIDLE是


如果您的某些项目没有所有属性,您可以使用
foreach
中的
$data
属性安全访问它们

在这种情况下,如果属性丢失,则绑定仍将工作,只是不会显示任何内容:

<tbody data-bind="foreach: prayerData">
    <tr>
        <td data-bind="text: index"></td>  <!-- Display the current row -->
        <td data-bind="text: $data.fajr"></td>
        <td data-bind="text: $data.zuhr"></td>
        <td data-bind="text: $data.asr"></td>
        <td data-bind="text: $data.maghrib"></td>
        <td data-bind="text: $data.isha"></td>
    </tr>
</tbody>

演示

如果缺少以下属性,您甚至可以在绑定中提供默认值:

<td data-bind="text: $data.fajr || 'no fajr property'"></td>


演示

只需在此处添加
$data
示例即可。干杯
<td data-bind="text: $data.fajr || 'no fajr property'"></td>