2013-06-28 2 views
0

Я пытаюсь использовать шаблоны JST для проекта с использованием Backbone. Кажется, все работает нормально, но я получаю синтаксическую ошибку, с которой я не могу окутать голову.Grunt не удается скомпилировать JST

Это то, что консольные выходы:

Running "jst:compile" (jst) task 
>> SyntaxError: Unexpected token = 
Warning: JST failed to compile. Use --force to continue. 

Aborted due to warnings. 

Бег с --verbose

Verifying property jst.compile exists in config...OK 
Files: templates/ideas/idea.jst -> scripts/templates/ideas/idea.js 
Files: templates/ideas/idea_index.jst -> scripts/templates/ideas/idea_index.js 
Options: namespace="JST", templateSettings={"interpolate":{}}, processContent=undefined, separator="\n\n", prettify, processName=undefined 
Reading templates/ideas/idea.jst...OK 
>> SyntaxError: Unexpected token = 
Warning: JST failed to compile. Use --force to continue. 

Aborted due to warnings. 

Это файл, он пытается скомпилировать:

<!-- IDEA START --> 
<div class="ideadata" data-id="<%= id %>" data-date="<%= this.date %>" data-votes="<%= this.votes %>"> 

    <!-- Id --> 
    <span class="id">#<%= this.id %></span> 

    <!-- Idea --> 
    <p><%= this.content %></p> 

    <!-- Voting and social options --> 
    <div class="social"> 
    <!-- VOTER --> 
     <!-- HTML --> 
    <!-- END --> 

    <a href="#" onclick="window.open(
     'https://twitter.com/intent/tweet?original_referer=' + encodeURIComponent(location.href) + '&screen_name=roskildefestival&text=<%= this.content %>&tw_p=tweetbutton', 
     'twitter-share-dialog', 
     'width=550,height=390'); 
     return false;"><img src="http://cdn3.iconfinder.com/data/icons/picons-social/57/03-twitter-20.png" /></a> 

    <a href="#" onclick="window.open(
     'https://www.facebook.com/sharer/sharer.php?u=' + encodeURIComponent(location.href), 
     'facebook-share-dialog', 
     'width=626,height=436'); 
     return false;"><img src="http://cdn3.iconfinder.com/data/icons/wpzoom-developer-icon-set/500/01-20.png" /></a> 
    </div> 

</div> 
<!-- IDEA END --> 

Я попытался заменить <% = на <%, и это кажется успешным, однако этого я не хочу достичь.

Я делаю что-то неправильно здесь или это неправильный способ написать шаблон JST?

Раньше я использовал файлы * .jst.eco в качестве файлов шаблонов, когда я работал на Rails, но поскольку это проект PHP, мне нужно было выяснить другой способ сделать что-то, и поэтому также не уверены, что это лучший способ сделать это или нет.

1ST EDIT:

Таким образом, после получения какой-то обратной связи я попытался разбить его на самый простой из простой с этим кодом:

<% if(true){ %> 
    <div>Hey</div> 
<% } %> 

Что преуспевает в составлении и дает мне это :

this["JST"] = this["JST"] || {}; 

this["JST"]["ideas/idea"] = function(obj) {obj || (obj = {});var __t, __p = '', __e = _.escape, __j = Array.prototype.join;function print() { __p += __j.call(arguments, '') }with (obj) { if(true){ ;__p += '\n <div>Hey</div>\n'; } ;}return __p}; 

И это, который не может скомпилировать:

<div><%= this.id; %></div> 
+0

Попробуйте 'черновую ПДжС: компилировать --stack', как это должно дать вам трассировки стека, о том, где ошибка, происходящих из , –

+0

Пытался запустить его с помощью --verbose, ничего не случилось с --stack. Я обновил вопрос, чтобы он соответствовал тому, что он сделал. – dnlmzw

+0

Я не понимаю, почему это было отклонено. Голосование назад, я думаю, что это прекрасный вопрос. – crempp

ответ

0

Я думаю, что я нашел свою ошибку:

<!-- IDEA START --> 
<div class="ideadata" data-id="<%= id %>" 

это не должно быть <%= this.id %>? Если он не может найти id, тогда он будет пустым, и поэтому у вас будет открытый =, что может привести к ошибке?

+0

На самом деле я просто удалил это.потому что я хотел убедиться, что это не вызывает никаких проблем. Я получаю такую ​​же ошибку. впереди. – dnlmzw

+0

Хм, вы пытались отрезать весь блок кода (файл) и вставить часть по частям (чтобы увидеть, когда эта ошибка возникает), это primitve, которую я знаю, но таким образом вы могли бы выяснить конфликт, возможно? – Francodi

+0

Да. Я обновил свой вопрос с результатом, который я получил от этого, но это не удается даже в простейшей форме. Я опубликовал вопрос в своем github: https://github.com/gruntjs/grunt-contrib-jst/issues/29 – dnlmzw

1

Для всех, кто сталкивается с этим, ответ находится в проблеме github, упомянутой в комментариях. [github.com/gruntjs/grunt-contrib-jst/issues/29] Ответ:

Если вы хотите анализировать шаблоны так же, как _.template, то вы не должны перезаписывать templateSettings.

Так что я изменил это:

 jst: { 
     compile: { 
      options: { 
      templateSettings: { 
       interpolate : /\{\{(.+?)\}\}/g 
      } 
      }, 
      files: { 
      "<%= buildDir %>/templates.js": ["source.html"] 
      } 
     } 
     } 

к этому:

 jst: { 
     compile: { 
      options: { 

      }, 
      files: { 
      "<%= buildDir %>/templates.js": ["source.html"] 
      } 
     } 
     } 
+0

Фантастический, это был правильный ответ, по крайней мере для меня. – crempp