反向使用Javascript模板语言

有没有什么像模板引擎(la Mustache.js)可以在“反向”模板中进行模板化?

这意味着我提供了呈现的html和模板文件,通过引擎运行它,并从中获取数据(比如JSON结构)。

我意识到这是可以用“屏幕抓取库”来完成的事情,但我从来没有见过使用胡须风格模板的屏幕抓取库(不管这些叫做什么)。


通用解决方案不存在。 例如,您永远不能撤消以下模板:{{foo}} {{bar}},因为无法找到第一个胡须停止位置和第二个胡须停止的位置。

例如:

html: 'hello world!'
template: '{{foo}}{{bar}}'
model: {
    foo: '',
    bar: 'hello world!'
}
model2: {
    foo: 'hello world!',
    bar: ''
}

模型和模型2都从模板呈现完全相同的html,所以它们都是有效的反转。

但是,如果您为模板制定了一些规则,则可以毫不含糊地执行此操作。

规则:

  • 两个胡须永远不会接触(如上所述)。
  • 胡须内容的开始永远不会与胡须后面的第一个文本部分(或者我们无法找到胡须的末尾)相同。
  • 一节中的第一个文本部分不能与一节后的第一个文本部分相同(或者我们无法找到该节的结尾)。
  • 最好不要使用richtext {{{}}}小胡子(它允许包含任何内容,所以反向匹配意味着它可以匹配文档的其余部分)。
  • 这些规则似乎对纯文本非常严格,但对于xml和html,它们工作得很好(如果您只对元素和属性内容感兴趣)。 例如,如果仅使用纯文本{{}}胡须,则规则二永远不会成为问题。

    例如,下面的模板可以颠倒过来,没有任何含糊之处:

    <div>
        <p>{{title}}</p>
        <ul>
            {{#list}}
                <li>{{item}}</li>
            {{/list}}
        </ul>
    </div>
    

    但在</ ul>之前添加另一个<li>会使模板不明确(规则3)。

    我还没有找到任何代码在线,所以我已经开始为此编写一个库。 但目前还没有完成,每次我研究它时,我都会发现新的局限性。 只有真正简单的模板才能正常工作(我允许的唯一胡须是{{}},{{#}}和{{/}})。


    我找到了使用另一个模板系统的解决方案:https://github.com/fabiomcosta/mootools-meio-template/tree/master。 它似乎有相同的限制。

    链接地址: http://www.djcxy.com/p/73525.html

    上一篇: Javascript templating language in reverse

    下一篇: Send a curl request with no Accept header?