zoukankan      html  css  js  c++  java
  • 模板使用的一个坑

    html模板相信很多人都用过,类似angular中的指令,通过模板对于html中很多相似的片段完全可以借助for循环或者ng-repeat指令来生成,大大提高效率。

    最近在使用模板时候碰到一个坑,分享出来,希望对后来者有所帮助。

    重构之前的代码:

    <script type="text/javascript" src="../js/spaceBlogs.js" async></script>
    <div id="spaceBlogsId" class="box" include="./tpl/spaceBlogsTpl.html"></div>

      

    var drawTemplate = function(DomId){
        var Dom =  $("div[id="+DomId+"]");
        if(!Dom){
            alert("Dom不存在");
        }
        else{
            $.ajax({
                url : $(Dom).attr("include"),
                success : function(res){
                    if (!$(Dom).attr("data")) {
                        var text = _.template(res);
                    }
                    else {
                        var text = _.template(res)($_scope[$(Dom).attr("data")]);
                    }
                    $(Dom).html(text);
                },
                error : function(res){
                    console.log(DomId + "模板绘制失败");
                }
            })
        }
    };
    drawTemplate("spaceBlogsId")

      但是这样写会导致一个问题,很多时候其实模板还没有渲染,对模板的dom添加事件的一些js已经运行了,导致事件没有添加上去。废了好大事都没有优化好,最后读了阮大神的一片博文才豁然开朗,于是有了下面的重写:

      <div id="spaceBlogsId" class="box" include="./tpl/spaceBlogsTpl.html"></div>
    

      

    var newFun = function(){
        var head= document.getElementsByTagName('head')[0];
        var script= document.createElement('script');
        script.type= 'text/javascript';
        script.src= '../libs/rl_exp.js';
        head.appendChild(script);
        head= document.getElementsByTagName('head')[0];
        script= document.createElement('script');
        script.type= 'text/javascript';
        script.src= '../js/uploadFile.js';
        head.appendChild(script);
        setTimeout(function(){
            changeTagFun($("#blogTags").find("a")[2]);
        },100);
    };
    
    
    
    //绘制模板方法
    var drawTemplate = function(DomId,successCallBack){
        var Dom =  $("div[id="+DomId+"]");
        if(!Dom){
            alert("Dom不存在");
        }
        else{
            $.ajax({
                url : $(Dom).attr("include"),
                success : function(res){
                    if (!$(Dom).attr("data")) {
                        var text = _.template(res);
                    }
                    else {
                        var text = _.template(res)($_scope[$(Dom).attr("data")]);
                    }
                    $(Dom).html(text);
                    if(successCallBack){
                        successCallBack();
                    }
                },
                error : function(res){
                    console.log(DomId + "模板绘制失败");
                }
            })
        }
    };
    
    
    drawTemplate("spaceBlogsId",newFun);
    

     

    原文连接:http://javascript.ruanyifeng.com/bom/engine.html#toc5

    学而时习之不亦悦乎。
  • 相关阅读:
    ecshop 商品分类下的销售排行
    ecshop批量清除商品的精品新品热销属性
    ECSHOP二次开发之给商品增加新字段
    ECSHOP首页调用文章内的缩略图
    ECSHOP给分类添加代表图
    ECSHOP首页促销商品下显示促销时间
    鼠标点击后更换背景
    ECSHOP如何修改商品评论或留言的日期
    ECSHOP设置指定IP才能登录后台
    ecshop远程图片本地化保存相册图片
  • 原文地址:https://www.cnblogs.com/xianZJ/p/4836974.html
Copyright © 2011-2022 走看看