反编译_underscore模板

时间:2017-01-22 18:15:53

标签: templates backbone.js underscore.js

我有很多“已编译”的下划线模板(几个月前我将已编译的模板保存到文件中,并意外删除原始模板文件夹... :()是否可以“反编译”此模板?示例之一:

UV.templates["template-button-widget"] = function() {
        return $.trim(function(obj) {
            var __t, __p = "",
                __j = Array.prototype.join,
                print = function() {
                    __p += __j.call(arguments, "")
                };
            with(obj || {}) __p += '\n\n    <div class="button" data-id="' + (null == (__t = data._id) ? "" : _.escape(__t)) + '">\n\n        <div class="icon"></div>\n\n    </div>\n\n';
            return __p
        }.apply(this, arguments))
}, 

2 个答案:

答案 0 :(得分:1)

如果您阅读_.template的{​​{3}},您会发现它很简单,您可以通过几个小时的工作来扭转它。请务必找到您的下划线版本的代码(显然,您的版本不是最新版本),旧版文档可以在source中找到。

以下是撤消示例模板所需的代码:

var compiled = function() {
        return $.trim(function(obj) {
            var __t, __p = "",
                __j = Array.prototype.join,
                print = function() {
                    __p += __j.call(arguments, "")
                };
            with(obj || {}) __p += '\n\n    <div class="button" data-id="' + (null == (__t = data._id) ? "" : _.escape(__t)) + '">\n\n        <div class="icon"></div>\n\n    </div>\n\n';
            return __p
        }.apply(this, arguments))
};

var source = compiled.toString();

// Strip start/end code
source = source.substring(source.indexOf("with(obj || {}) __p += '\\n\\n") + 28);
source = source.substring(0, source.indexOf("\\n\\n';"));

// Reverse escape
source = source.replace(/' \+ \(null == \(__t = ([^)]+)\) \? "" : _.escape\(__t\)\) \+ '/g, "<%- $1 %>");

$('#result').text(source.replace(/\\n/g, "\n"));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.3.3/backbone-min.js"></script>
<pre id="result"/>

答案 1 :(得分:0)

您可以手动反编译..根据您的代码,您的模板定义将是:

`<div class="button" data-id="<%= data._id %>'">
    <div class="icon"></div>
</div>`

这很容易但对于复杂的模板来说会更难。