上面代码在模板字符串之中,放置了一个常规模板。该模板使用放置 JavaScript 代码,使用<%= ... %>输出 JavaScript 表达式。

    一种思路是将其转换为 JavaScript 表达式字符串。

    1. echo('<ul>');
    2. for(let i=0; i < data.supplies.length; i++) {
    3. echo('<li>');
    4. echo(data.supplies[i]);
    5. echo('</li>');
    6. };
    7. echo('</ul>');

    然后,将template封装在一个函数里面返回,就可以了。

    1. let script =
    2. let output = "";
    3. function echo(html){
    4. output += html;
    5. }
    6. ${ template }
    7. })`;
    8. return script;

    compile函数的用法如下。

    1. let parse = eval(compile(template));
    2. div.innerHTML = parse({ supplies: [ "broom", "mop", "cleaner" ] });
    3. // <ul>
    4. // <li>broom</li>
    5. // <li>mop</li>
    6. // </ul>