• artTemplate的使用总结


    原生语法

    使用原生语法,需要导入template-native.js文件。

    在HTML中定义模板,注意模板的位置,不要放到被渲染区域,防止模板丢失。

    <script id="main_panel_big_sale_template" type="text/html">
        <% for (var i = 0; i < products.length; i ++) { %>
            <% var product =products[i]; %>
            <% if (i < 3) { %>
                <li>
                    <img src="<%=getImageUrl(product.pictographicIconList[0].image.url)%>" data-imgname="<%=product.pictographicIconList[0].image.url%>">
                    <div class="flash-time-box">
                        <span>2015-02-09</span>
                    </div>
                    <strong class="marque"><%=product.name%></strong>
                    <strong class="libelle"><%=product.description%></strong>
                    <div class="no-picto">
                        <span class="prod-tip">
                            <img src="img/grey.png" data-original="img/icon.png">
                        </span>
                        <span class="italic black">
                            <span class="cny-curr">¥&nbsp;<%=formatPrice(product.promoPrice,'integer')%></span><span class="decimal"><%=formatPrice(product.promoPrice,'decimal')%></span>
                        </span>
                    </div>
                </li>
            <% } %>
        <% } %>
    </script>
    
    

    template(id, data)

    渲染数据到页面

    $('#main_panel').html(template('main_panel_big_sale_template', data));

    简洁语法

    使用简洁语法,导入template.js文件。

    <script id="main_panel_big_sale_template" type="text/html">
       {{each products as product i}}
       {{if i < 3}}
           <li>
               <img src="{{product.pictographicIconList[0].image.url | getImageUrl}}" data-imgname="{{product.pictographicIconList[0].image.url}}">
               <div class="flash-time-box">
                   <span>2015-02-09</span>
               </div>
               <strong class="marque">{{product.name}}</strong>
               <strong class="libelle">{{product.description}}</strong>
               <div class="no-picto">
                    <span class="prod-tip">
                        <img src="img/grey.png" data-original="img/icon.png">
                    </span>
                    <span class="italic black">
                        <span class="cny-curr">¥&nbsp;{{product.price.value | formatPrice: 'integer'}}</span><span class="decimal">{{product.price.value | formatPrice: 'decimal'}}</span>
                    </span>
               </div>
           </li>
       {{/if}}
       {{/each}}
    </script>

    渲染数据到页面,和原生语法一样

    $('#main_panel').html(template('main_panel_big_sale_template', data));

    调用外部函数

    template.helper

    上面的例子中,都调用了formatPrice函数,要调用此函数需要通过helper方法注册:

    template.helper('formatPrice', function(price, type) {
        if(price){
            var arrayPrice = price.toString().split(".");
            if(type == 'integer') {
                return arrayPrice[0]?arrayPrice[0]:"0";
            }else if (type =='decimal') {
                return arrayPrice[1]?arrayPrice[1].length == 1?"."+arrayPrice[1]+"0":"."+arrayPrice[1]:".00";
            }
        }else{
            if(type == 'integer') {
                return "0";
            }else if (type =='decimal') {
                return ".00";
            }
        }
    });

    例子2:多个参数

    <script type="text/html" id="user_tmpl"> 
        <div>姓名:<span>{{name}}</span></div> 
        <div>性别: 
            <span>{{if sex==0}}女{{else}}男{{/if}}</span> 
        </div> 
        <div>性别:<span>{{getSexName name sex}}</span></div> 
        <div>学校:<span>{{school}}</span></div> 
    </script>
    
    <script type="text/javascript"> 
        var data = { 
            name: "小明", 
            sex: 1, 
            school: "新华小学" 
        }; 
        template.helper("getSexName", function(arg1, arg2) { 
            if (arg2 == "0") { 
                return "" + arg1; 
            } else { 
                return "" + arg1; 
            } 
        }); 
        var user = template("user_tmpl", data); 
        document.getElementById("user_info").innerHTML = user; 
    </script> 

     

     

    原生语法与简洁语法比较

    语法类型调用外部函数
    原生 <%=formatPrice(product.promoPrice,'integer')%>
    简洁 <code>{{product.price.value | formatPrice: 'integer'}}</code>

    简洁语法的传参有点奇怪,原生语法就很好理解,如果要传递三个参数,简洁语法该怎么写呢?

    简洁语法的循环如果要做更多逻辑,也实现不了

    推荐使用原生语法

    template.compile

    模板可以直接写在JS中,再编译渲染。



    var source = '<ul>'
    +    '<% for (var i = 0; i < list.length; i ++) { %>'
    +        '<li>索引 <%= i + 1 %> :<%= list[i] %></li>'
    +    '<% } %>'
    + '</ul>';
    
    var render = template.compile(source);
    var html = render({list: ['摄影', '电影', '民谣', '旅行', '吉他']});
    document.getElementById('content').innerHTML = html;

    这种方式的的缺点是,模板通过字符串拼接,不好维护,适合简单模板。

    本文转自:https://www.jianshu.com/p/483fa7f6f55b

    如果这篇文章对您有帮助,您可以打赏我

    技术交流QQ群:15129679

  • 相关阅读:
    (转)swc使用
    (转)AS3中的反射相关
    AS获取url参数
    (转)深入理解Flash Player的安全域(Security Domains)
    (转)html<embed>标签和url向Flash传flashvars值
    (转)ApplicationDomain
    灰度发布
    (转)flex中使用swc实现更好的界面代码分离
    (转)深入理解Flash Player的应用程序域(Application Domains)
    嵌入式系统可执行文件格式
  • 原文地址:https://www.cnblogs.com/yeminglong/p/8386248.html
Copyright © 2020-2023  润新知