2017-01-22 8 views
0

У меня есть много «скомпилированных» шаблонов подчеркивания (несколько месяцев назад я сохранял скомпилированные шаблоны в файл и случайно удалял папку исходных шаблонов ... :() разрешено ли «декомпилировать» эти шаблоны? один из примера:decompile _underscore template

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
.

Если вы прочитали source от _.template, вы найдете его достаточно простым, чтобы вы могли отменить его за несколько часов работы. Не забудьте найти код для вашей версии подчеркивания (очевидно, что ваш не является последним, поскольку есть изменения), старые документы можно найти в 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