我有很多“已编译”的下划线模板(几个月前我将已编译的模板保存到文件中,并意外删除原始模板文件夹... :()是否可以“反编译”此模板?示例之一:
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))
},
答案 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>`
这很容易但对于复杂的模板来说会更难。