我正在使用单击应用程序与淘汰赛。 对于这个非常奇怪的问题,我一直在撞墙。 IE浏览器奇怪地决定不对我的可观察数组排序,而Chrome和Firefox按预期工作。Knockout-IE不排序可观察阵列(Chrome和Firefox)
下面的代码:该TR点击事件调用排序功能,但IE浏览器根本不对它进行排序
var lastResponseSort = '';
var sortResponses = function (data, event) {
var sortField = $(event.target).attr("data-arg");
if (sortField !== undefined) {
var descending = lastResponseSort != "";
lastResponseSort == "" ? lastResponseSort = sortField : lastResponseSort = "";
// Sort Array here
arrResponses.sort(function (x, y) {
if (descending) {
return x[sortField] > y[sortField] ? -1 : 1;
} else {
return x[sortField] < y[sortField] ? -1 : 1;
}
});
}
HTML:
<table id="crisis-info">
<thead>
<tr data-bind="click: sortResponses">
<th data-arg="eventName">Response name</th>
<th data-arg="eventRelatesCrisisTypes()[0].crisisType().name">Crisis Type</th>
<th data-arg="numberOfPeopleAffected">Affected</th>
<th data-arg="country().name">Country & Region</th>
</tr>
</thead>
<tbody data-bind="visible: arrResponses().length > 0, foreach: arrResponses">
<tr>
<td><span data-bind="text: eventName(), attr: { title:eventName() }"></span>
</td>
<td><span data-bind="text: eventRelatesCrisisTypes()[0].crisisType().name(),attr: { title: eventRelatesCrisisTypes()[0].crisisType().name() }"></span>
</td>
<td align="center"><span data-bind="text: numberOfPeopleAffected()"></span>
</td>
<td><span data-bind="text: country().name() + ', ' + country().region().name()"></span></td>
</tr>
</tbody>
</table>
这是更迷人的问题的一部分是在应用调试器并且执行sort函数时,IE甚至不会对数组进行排序,更不用说更新我认为是问题的UI,也不会抛出任何错误。如果有人遇到此问题或知道解决方法,请分享。 谢谢
'x [sortField]'不是你想要的。你需要做一些像'eval('x。'+ sortField)'。 –
仍然是一样的...与铬合作,但不在IE:( – Sarcastic
由于属性是可观察到的,你也需要解开它们:'eval('x。'+ sortField)()'当我看到它时,你的代码无法在任何浏览器中工作 –