在运行时加载knockout.jslib

load knockout.js lib at runtime

本文关键字:jslib knockout 加载 运行时      更新时间:2023-09-26

我想在运行时加载knockout.js库。它被加载,但在applyBindings()之后,html主体标记(即<body></body>)失效并抛出

未捕获的类型错误:无法读取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);

我只是不明白,为什么身体元素会被清空
附言:如果我事先添加了knockout.js库,它会非常好用

首先,在没有确保脚本已加载的情况下使用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