我想在运行时加载knockout.js lib。它被加载但是在applyBindings()之后,html正文标记,即<body></body>
disappers和throws
未捕获的TypeError:无法读取null的属性'nodeType'
var script = document.createElement("script");
script.setAttribute("type", "text/javascript");
script.setAttribute("src", "https://cdnjs.cloudflare.com/ajax/libs/knockout/3.3.0/knockout-min.js");
document.getElementsByTagName("head")[0].appendChild(script);
ko.applyBindings(viewModel);
我只是不明白,为什么身体元素被清空
的 P.S。 :如果我事先添加knockout.js lib,它的效果很好。
答案 0 :(得分:2)
首先,您在不确定脚本已加载的情况下使用ko
。您需要使用onload
属性传递回调:
script.onload = function() {
ko.applyBindings(viewModel);
}
此外,Knockout抱怨是因为您在DOM准备好之前调用了applyBindings
。尝试将代码作为DOMContentLoaded
事件回调的一部分运行:
document.addEventListener("DOMContentLoaded", function() {
var script = document.createElement("script");
script.setAttribute("type", "text/javascript");
script.setAttribute("src", "https://cdnjs.cloudflare.com/ajax/libs/knockout/3.3.0/knockout-min.js");
document.getElementsByTagName("head")[0].appendChild(script);
script.onload = function() {
ko.applyBindings(viewModel);
}
});
请参阅Fiddle