我观察到非常奇怪的行为,当在三星平板电脑上测试系统时,一些链接停止工作。为了使调试更容易,我使用Chrome开发工具模拟器,当页面加载时,我可以从控制台调用kncoukout.js全局ko
进行调试(如获取绑定元素的上下文...)事情是,当我试图从事件处理程序ko
进行调试时消失了。
请看下面的截图。
我已经能够在不回叫时访问ko
,
然后我在事件处理程序中放置断点,并尝试在a
click
上再次访问ko
,但它不再存在,然后它失败,并显示错误ko
不存在。
"怎么回事ko
怎么会凭空消失"
我并不认为这有什么关系(任何事件处理程序都有同样的情况),但有人会要求提供使ko
消失的代码。
var parseHrefBinding = function (link) {
var newHref = null;
var boundEl = $(link).closest('[data-bind]')[0];
if (boundEl) {
var data = ko.dataFor(boundEl);
if (data) {
var a = document.createElement('a');
a.setAttribute('data-bind', link.attributes['data-bind'].value);
ko.applyBindings(data, a);
newHref = a.href;
}
}
return newHref;
};
$(document).on("click", "a", function () {
var res = true;
var link = this;
var parent = $(link).parents('a')[0];
if (parent) {
// The default Android browser (V2-4.1) sets nested a[href] to their parent's href.
var href = parent.href === link.href ? parseHrefBinding(link) : link.href;
setTimeout(function () {
document.location.href = href;
}, 10);
res = false;
}
return res;
});
1条答案
按热度按时间0pizxfdo1#
上帝,这是史诗,原来,要在
Android Browser 4
上的事件处理程序中使用全局变量,必须在ko
前面添加window
,如window.ko
,见下面的截图。所以修复就像改变一样简单
var data = ko.dataFor(boundEl);
至
var data = window.ko.dataFor(boundEl);