arTemplate

Posted 慕容小凡

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了arTemplate相关的知识,希望对你有一定的参考价值。

模板解析语法

defaults.parser = function (code, options) {
    // var match = code.match(/([\w\$]*)(\b.*)/);
    // var key = match[1];
    // var args = match[2];
    // var split = args.split(‘ ‘);
    // split.shift();

    code = code.replace(/^\s/, ‘‘);
    var split = code.split(‘ ‘);
    var key = split.shift();
    var args = split.join(‘ ‘);    

    switch (key) {

        case ‘if‘:
            code = ‘if(‘ + args + ‘){‘;
            break;

        case ‘else‘:            
            if (split.shift() === ‘if‘) {
                split = ‘ if(‘ + split.join(‘ ‘) + ‘)‘;
            } else {
                split = ‘‘;
            }

            code = ‘}else‘ + split + ‘{‘;
            break;

        case ‘/if‘:
            code = ‘}‘;
            break;

        case ‘each‘:            
            var object = split[0] || ‘$data‘;
            var as     = split[1] || ‘as‘;
            var value  = split[2] || ‘$value‘;
            var index  = split[3] || ‘$index‘;
            
            var param   = value + ‘,‘ + index;
            
            if (as !== ‘as‘) {
                object = ‘[]‘;
            }
            
            code =  ‘$each(‘ + object + ‘,function(‘ + param + ‘){‘;
            break;

        case ‘/each‘:
            code = ‘});‘;
            break;

        case ‘echo‘:
            code = ‘print(‘ + args + ‘);‘;
            break;

        case ‘print‘:
        case ‘include‘:
            code = key + ‘(‘ + split.join(‘,‘) + ‘);‘;
            break;

        default:
            // 过滤器(辅助方法)
            // {{value | filterA:‘abcd‘ | filterB}}
            // >>> $helpers.filterB($helpers.filterA(value, ‘abcd‘))
            // TODO: {{ddd||aaa}} 不包含空格
            if (/^\s*\|\s*[\w\$]/.test(args)) {
                var escape = true;
                // {{#value | link}}
                if (code.indexOf(‘#‘) === 0) {
                    code = code.substr(1);
                    escape = false;
                }

                var i = 0;
                var array = code.split(‘|‘);
                var len = array.length;
                var val = array[i++];

                for (; i < len; i ++) {
                    val = filtered(val, array[i]);
                }

                code = (escape ? ‘=‘ : ‘=#‘) + val;

            // 即将弃用 {{helperName value}}
            } else if (template.helpers[key]) {                
                code = ‘=#‘ + key + ‘(‘ + split.join(‘,‘) + ‘);‘;
            
            // 内容直接输出 {{value}}
            } else {
                code = ‘=‘ + code;
            }

            break;
    }

    return code;
};

 

以上是关于arTemplate的主要内容,如果未能解决你的问题,请参考以下文章

高性能模板artemplate

微信小程序代码片段

VSCode自定义代码片段——CSS选择器

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js

片段和活动之间的核心区别是啥?哪些代码可以写成片段?

VSCode自定义代码片段——.vue文件的模板