18 votes

Utilisation d'Underscore.js avec ASP.NET

J'ai comparé différents moteurs de modèles JavaScript afin de déterminer celui qui offre les meilleures performances pour les grands ensembles de données. J'en ai trouvé un qui est Underscore.js . Cependant, je n'ai pas réussi à faire fonctionner un seul des exemples. Mon modèle ressemble à ceci :

<% _.each(projects(), function(project) { %>
   <tr>
      <td><%= project.code %></td>
      <td><%= project.request %></td>
      <td><%= project.stage %></td>
      <td><%= project.type %></td>
      <td><%= project.launch %></td>
   </tr>
<% }) %>

Cependant, lorsque j'exécute la page, j'obtiens une exception ASP.NET côté serveur, car le système tente de compiler le texte dans la zone de texte. <% ... %> tags :

Compiler Error Message: CS1026: ) expected
Line 826:                     <% _.each(projects(), function(project) { %>

Je n'ai pas trouvé de moyen d'échapper à ces balises, ni de moyen de configurer Underscore pour qu'il utilise une syntaxe différente. Existe-t-il une solution de contournement, ou bien Underscore et ASP.NET sont-ils tout simplement incompatibles entre eux ?

27voto

tkone Points 8216

Même problème avec JSP, donc nous faisons ceci :

_.templateSettings = {interpolate : /\{\{(.+?)\}\}/g,      // print value: {{ value_name }}
                      evaluate    : /\{%([\s\S]+?)%\}/g,   // excute code: {% code_to_execute %}
                      escape      : /\{%-([\s\S]+?)%\}/g}; // excape HTML: {%- <script> %} prints &lt;script&gt;

Cela vous permettra d'utiliser les différentes versions des sorties de balises : interpolation, évaluation et échappement.

5voto

Didier Ghys Points 17636

<% sont des balises utilisées par asp.net. Ainsi, lorsque la page est analysée, elle tente de les interpréter mais asp.net ne comprend pas la syntaxe car il s'attend à du code C# et non javascript.

Vous pouvez changer les symboles d'interpolation dans le templateSettings pour quelque chose comme { } et {{ }}

_.templateSettings = {
  interpolate : /\{\{(.+?)\}\}/g
  evaluate : /\{(.+?)\}/g; 
};

var template = _.template("Hello {{ name }}!");
template({name : "Mustache"});
=> "Hello Mustache!"

Documentation


Pour info, ce sont les paramètres par défaut :

// By default, Underscore uses ERB-style template delimiters, change the
// following template settings to use alternative delimiters.
_.templateSettings = {
  evaluate    : /<%([\s\S]+?)%>/g,
  interpolate : /<%=([\s\S]+?)%>/g,
  escape      : /<%-([\s\S]+?)%>/g
};

0voto

Remplacer :

<% }) %>

changer pour :

<% }); %>

bonne chance !!!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X