在运行时添加Knockout模板会清空HTML DOM

时间:2015-03-25 07:37:45

标签: javascript jquery html dom knockout.js

在运行时添加淘汰模板会清空HTML DOM

    var templateEngine = new ko.nativeTemplateEngine();
    templateEngine.addTemplate = function (templateName, templateMarkup) {
        document.write("<script type='text/html' id='" + templateName + "'>" + templateMarkup + "<" + "/script>");
    };
    templateEngine.addTemplate("gridTable","<table></table");

所有早期的内容都是,DOM变为

<html><head><script type="text/html" id="gridView"><table></table></script></head></html>

2 个答案:

答案 0 :(得分:1)

正如@nemsev所说,

  

eveloper.mozilla.org/en-US/docs/Web/API/Document/write:在已关闭(已加载)的文档上调用document.write 会自动调用document.open来清除文档

所以,我修改了我的代码,

    var templateEngine = new ko.nativeTemplateEngine();

    templateEngine.addTemplate = function (templateName, templateMarkup) {
        //document.write("<script type='text/html' id='" + templateName + "'>" + templateMarkup + "<" + "/script>");
        var scriptTag = document.createElement("script");
        scriptTag.type = "text/html";
        scriptTag.id = templateName;
        scriptTag.innerHTML = templateMarkup;
        var node = document.getElementsByTagName("head")[0];
        node.appendChild(scriptTag);
    };

    templateEngine.addTemplate("gridTable","<table></table");

答案 1 :(得分:0)

我建议你在html结构中创建单独的div,然后在该div中加载模板。例如,您可以使用jquery。

$("#someDiv").append(templateMarkup);