淘汰赛无法绑定 $root
Posted
技术标签:
【中文标题】淘汰赛无法绑定 $root【英文标题】:Knockout UNable to Bind $root 【发布时间】:2013-01-01 04:36:30 【问题描述】:在我添加的文档中
<div data-bind="text: ko.toJSON($root)"></div>
到我的 html5 页面。不幸的是,IE8 给了我一个错误“无法将绑定应用到 $root”或类似的。
在 FF 和 Chrome 上没有问题。
如何恢复当前视图模型的 json 转储以满足调试需求?
【问题讨论】:
你用的是哪个KO版本?确切的错误信息是什么?你能在 JSFiddle 中制作一个 repro 吗?因为您发布的代码在 IE8 jsfiddle.net/Vp2Zx 中运行良好 消息如下:无法解析绑定。消息:[对象错误];绑定值:文本:ko.toJSON($root) 我能够复制它。问题是 ko.toJSON 在内部使用JSON.stringify
,理论上 IE8 支持它,但由于某种原因它无法正常工作。参考 JSON2.js(例如这里的表单 ajax.cdnjs.com/ajax/libs/json2/20110223/json2.js),它应该在 IE8 中工作。另请参阅此 github 问题:github.com/SteveSanderson/knockout/issues/574
【参考方案1】:
我能够重现您的问题:问题不在于您的绑定,而在于 ko.toJSON
调用。 Knockout 在内部使用 JSON.stringify
函数,在您的情况下失败。
虽然Is JSON.stringify() supported by IE 8? 答案是是。
但有时它只是不起作用:JSON object undefined in Internet Explorer 8,因为 IE 过于挑剔,如果您的 html 标记中有错误,它将退回到没有定义 JSON.stringify
的兼容模式。
你有两个选择:
检查您的 HTML 以使 IE8 正常运行,并且不要以兼容模式呈现它 使用JSON2 库,该库在旧版浏览器中提供JSON.stringify
。
【讨论】:
以上是关于淘汰赛无法绑定 $root的主要内容,如果未能解决你的问题,请参考以下文章