【问题标题】:ie10 and 11 fail to update visible binding in knockoutie10 和 11 在淘汰赛中无法更新可见绑定
【发布时间】:2014-08-14 19:25:45
【问题描述】:

我在 ko 中有以下可见绑定:

<div data-bind="visible: !hasConnection()" style="display: none;">
    <p>
        You have no connections created yet!
        <a href="#" data-bind="click: getAvailableConnections">Create one now?</a>
    </p>
</div>

用于此绑定的 VM 的相应部分是:

existingConnectionsListViewModel.connections = mapping.fromJS([]);
existingConnectionsListViewModel.hasConnection = ko.computed(function () {
    return existingConnectionsListViewModel.connections().length > 0;
});

当连接数组改变可见绑定时(在我看来,像这样的可见绑定更多)在包括 ie8 和 9 在内的所有浏览器中都可以工作

问题:

在 ie 10 和 11 observableArray 中使用 mapping.fromJS([]) 如果控制台窗口关闭,则不会更新


进一步调查:

如果在控制台窗口关闭时,我创建了一个连接,使 existingConnectionsListViewModel.connections().length 为 1

之后可以看到数组没有更新:

如果我刷新页面或在开发工具栏打开的情况下完成整个过程,那么数组将具有正确数量的项目。

  • 我的代码中没有 console.log 语句。
  • 将可见绑定用单引号括起来对问题没有影响
  • 整个模块处于严格模式
  • doctype 是:XHTML 1.0 Transitional

【问题讨论】:

  • 它是否只在 IE 10 和 11 上失败?
  • 很抱歉,如果不清楚。编辑了问题
  • 试试这个
  • 更新了问题。因为我的代码中有更多可见的绑定。只有这个像函数一样被访问。不,那不会有什么不同。但是仍然尝试过,但仍然没有区别

标签: javascript knockout.js


【解决方案1】:

如果在关闭控制台窗口时遇到部分代码无法运行的问题,除了代码中没有 console.log 语句之外,您还应该检查另一件重要的事情。

这就是 ajax 缓存。 IE 因缓存 ajax 结果而臭名昭著,如果您的响应被缓存,那么您的 observable 将不会接收新数据来通知您的可见绑定。

确保您已启用 cache: false 作为您使用的任何 ajax 工具的全局设置。

供jQ或放大使用:

$.ajaxSetup({
    cache: false
});

【讨论】:

    猜你喜欢
    相关资源
    最近更新 更多
    热门标签