2017-01-22 123 views
0

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

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

,如果您使用的git - 通常你可以做恢复到承诺在您删除的文件夹。 –

+0

不要使用git这个项目,但谢谢 – 20yco

回答

1

如果您阅读了_.templatesource,您会发现它很简单,您可以在几个小时的工作中将其反转。请确保找到您的下划线版本的代码(显然,由于存在更改,您的代码不是最新的),旧文档可以在changelog中找到。

这里是扭转你的示例模板所需的代码:

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"/>

+0

圣莫尔! huuuuugggeee谢谢! – 20yco

0

您可以手动编译吧..你的代码库的模板定义是:

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

很容易,但对于复杂的模板将变得更加困难

+0

谢谢,但是,这是最简单的模板,我有超过50个模板与“硬代码” – 20yco