JavaScript文件中的HTML模板。。。我做错了什么?

JavaScript文件中的HTML模板。。。我做错了什么?,javascript,jquery,jquery-templates,Javascript,Jquery,Jquery Templates,我试图实现的是将需要动态生成的所有内容的HTML模板存储在单独的js文件中(而不是在页面中呈现) buildHtml函数显示其当前设置如何正常工作。我陷入困境的是如果。。模板对象中还有另一个变量,称为“input3”,其标记类似于(commonInput的精确标记) 我尝试将其用作input 3:''+this.commonInput+',但结果表明,您无法使用this从内部引用对象属性 我可以用完整的html创建“input3”,但是对于大的html块,这种方法不是很有用 寻找 这一具体问题的

我试图实现的是将需要动态生成的所有内容的HTML模板存储在单独的js文件中(而不是在页面中呈现)

buildHtml
函数显示其当前设置如何正常工作。我陷入困境的是如果。。模板对象中还有另一个变量,称为“input3”,其标记类似于
(commonInput的精确标记)

我尝试将其用作
input 3:''+this.commonInput+'
,但结果表明,您无法使用
this
从内部引用对象属性

我可以用完整的html创建“input3”,但是对于大的html块,这种方法不是很有用

寻找

  • 这一具体问题的解决办法
  • 如果这种方法是个坏主意,原因是什么
  • 更好的选择

    $j(document).ready(function() {
    
    var namespace = window.namespace || {};
    namespace.feature = namespace.appName || {};
    
    namespace.feature.templates = {
    
    input1  :   '<div>'+
                    '<p class="abc">Hey {username}</p>'+
                '</div>',
    
    input2  :   '<div>'+
                    '<div class="description">{description}</div>'+
                '</div>',
    
    commonInput :   '<div class="common">Common code</div>'
    
    };
    
    namespace.feature.module = function() {
    
    var container  = $j('#container'),
        t = namespace.feature.templates;
    
    var buildHtml = function(type) {
        var tmpHtml = t.input1 + t.commonInput + t.input2;
        container.append(tmpHtml);
    }
    
    var init = function() {
        buildHtml();
    }
    
    return {
        init : init,
    };
    
    }();
    
    namespace.feature.module.init();
    
    });
    
    $j(文档).ready(函数(){
    var namespace=window.namespace | |{};
    namespace.feature=namespace.appName | |{};
    namespace.feature.templates={
    输入1:“”+
    “

    嘿{username}

    ”+ '', 输入2:“”+ “{description}”+ '', commonInput:“通用代码” }; namespace.feature.module=函数(){ var container=$j(“#container”), t=namespace.feature.templates; var buildHtml=函数(类型){ var tmpHtml=t.input1+t.commonInput+t.input2; container.append(tmpHtml); } var init=函数(){ buildHtml(); } 返回{ init:init, }; }(); namespace.feature.module.init(); });

  • 我不确定你的确切问题是什么,但就更好的选择而言, 我建议使用jQuery模板

    以下是针对所有不同模板引擎及其性能的基准测试页面:

    您可以查看修订版以找到不同的引擎组合,也可以在不同的浏览器上运行它们以查看速度差异

    更新:原始jquery模板项目不再处于活动状态。这是旧项目的新家:


    我不再推荐jquery模板,因为现在有更好的替代方案。我最后一次检查,似乎是最有希望的

    就在我头上

    您可以将模板编写为构建字符串的函数

    input3 : function(param) {
        return '<div>' + param + '</div>'
    }
    
    此外,我喜欢在构建HTML时构建自己的DOM对象。并避免使用硬编码字符串

    input3 : function(param) {
        return '<div>' + param + '</div>'
    }
    

    您是否考虑过使用“谢谢兄弟”。。。谢谢你的帮助!您对这种动态创建内容的方法有何想法。。。您推荐任何其他方法/解决方案。不幸的是,我这里有一个问题,那就是链接已经腐烂了。也许这就是你所说的项目?取出连杆并更换为正确的连杆。你的那件看起来很像,但不是原来的。