在运行时加载knockout.js lib

时间:2015-03-25 06:31:37

标签: javascript jquery dom knockout.js

我想在运行时加载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,它的效果很好。

1 个答案:

答案 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