route - Los $ de JQuery están en conflicto con los de StringTemplate.Net en ASP.Net MVC
forms asp net core (14)
¿Has probado $$ o / $ para escapar de los signos de dólar en la plantilla de cadena? No estoy seguro acerca de ST específicamente, pero así es como funcionan la mayoría de los motores de plantillas.
En cuanto a otros motores de plantillas, me encantó nVelocity cuando lo usé en un proyecto.
Estoy explorando ASP.NET MVC y quería agregar jQuery para que el sitio sea interactivo. Usé StringTemplate, portado a .Net, como motor de plantillas para generar html y enviar JSON. Sin embargo, cuando veo la página, no puedo verla. Después de la depuración, me he dado cuenta de que $ es usado por StringTemplate para acceder a la propiedad, etc. y jQuery lo usa también para manipular el DOM. Vaya, he buscado en otros motores de plantillas y la mayoría usa el signo de dólar :(.
¿Algún motor de plantillas alternativo para ASP.Net MVC? Quería conservar jQuery porque MSFT anunció que se usará en Visual Studio (2008?)
Gracias por adelantado :)
Actualizar
Vaya a la respuesta en ASP.NET MVC View Engine Comparison para obtener una lista completa del motor de plantillas para ASP.NET MVC y sus pros y contras.
Actualización 2
Al final solo pondré el código JavaScript, incluido JQuery, en un archivo de script separado, por lo tanto, no me preocuparé por la mezcla $
en el archivo de plantilla.
Actualización 3
Cambié el título para reflejar lo que necesito resolver. Después de todo, "The Best X in Y" es una pregunta muy subjetiva.
Eche un vistazo al proyecto mvccontrib. Tienen 4 motores de visualización diferentes en este momento que son brail, nhaml, nvelocity y xslt.
Quizás jQuery.noConflict funcione para usted
Recomiendo encarecidamente Spark . Lo he estado usando por un tiempo ahora con jQuery y hasta ahora no he encontrado un solo problema.
En caso de que quiera seguir con StringTemplate (ST), consulte este artículo de la wiki de ST. También puede cambiar totalmente el comportamiento editando Antlr.StringTemplate.Language / DefaultTemplateLexer.cs y reemplazando el " $ " con lo que desea.
Podrías probar jsRepeater .
Por supuesto, puedes mover tu js logic a un archivo .js. Pero si lo quiere en línea con sus vistas StringTemplate, puede escapar utilizando la construcción / $.
Además, puede simplemente usar la construcción jQuery ("selector"), en lugar de $ ("selector") si desea evitar la sintaxis de escape.
Aquí hay un buen artículo sobre el uso de StringTemplate como motor de visualización en MVC .
También hay un motor OpenSource que lo acompaña , junto con algunas muestras .
Además, como se mencionó anteriormente, puede modificar su tipo Lexer. (conviértalo en un personaje alternativo a $).
JQuery puede ser desambiguado usando la palabra clave jQuery como esta:
jQuery(
en lugar de esto:
$(
Consideraría que esta es una mejor práctica. Elimina cualquier posibilidad de conflicto con otra biblioteca y hace que el código sea más legible.
Me gusta mucho la sintaxis en Django, entonces recomiendo NDjango :)
JsonFx.NET tiene un potente motor de plantillas del lado del cliente con una sintaxis familiar de estilo ASP.NET. Todo el framework está específicamente diseñado para funcionar bien con jQuery y ASP.NET MVC. Puede obtener ejemplos de cómo construir la interfaz de usuario del mundo real desde: http://code.google.com/p/jsonfx-examples/
He estado usando ANTLR StringTemplate para el proyecto ASP.NET MVC. Sin embargo, lo que hice fue ampliar la gramática de StringTemplate (template.g) para reconocer ''%'' (aspx.template.g) como delimitadores. Puede encontrar estos archivos si descarga la versión de StringTemplate.net. Genere los archivos correspondientes: AspxTemplateLexer.cs, AspxTemplateParser.cs, AspxTemplateParserTokenTypes.cs y AspxTemplateParserTokenTypes.txt.
Además, alteré StringTemplateLoader.cs para reconocer las extensiones .aspx y .ascx que reconoce Visual Studio. De esta manera, no estoy atascado con la extensión .st y los clientes no conocen la diferencia.
De todos modos, después de reconstruir StringTemplate tengo el comportamiento que quiero. Lo que me gusta de StringTemplate es que NO permite que se incorpore ningún código en la plantilla. Parece que Spark, como la plantilla predeterminada de ASP / MVC, es un código permisivo que hace que las plantillas sean menos portátiles.
Preferiría "<%" y "%>" como delimitadores, pero desafortunadamente la gramática ANTLR parece algo difícil y frágil de alterar a menos que alguien más lo haya hecho. Por otro lado, StringTemplate tiene una gran comunidad de soporte y un gran enfoque de separación, que es el objetivo de MVC.
Es posible que necesite este .NET Template Engine . Si desea usar el caracter ''$'', simplemente use ''$$''. Vea el código a continuación:
{%carName = "Audi R8"/}
{%string str = "This is an $carName$"/}
$str$
$$str$$
la salida será
This is an Audi R8
$str$
Si entiendo StringTemplate versión 4 correctamente puede definir su propio carácter de escape en el constructor Template
(o TemplateGroup
).
Encontré a Moustache como el motor de creación de plantillas más liviano, más fácil de usar y más a prueba de tontos para proyectos .Net (Web y backend)
Funciona bien con .Net 3.5 (lo que significa que no necesita el tipo dinámico y .Net 4.0 para trabajar con modelos de tipo mixto, como Razor).
La parte que más me gusta es la capacidad de anidar identidades arbitrarias dentro y hacer que el motor haga lo correcto. Esto hace que el paso de reetiquetado de motores obligatorios para todos sea súper simple:
var child = new {
nested = "nested value"
};
var parent = new {
SomeValue = "asdfadsf"
, down = child
, number = 123
};
var template = @"This is {{#down}}{{nested}}{{/down}}. Yeah to the power of {{number}}";
string output = Nustache.Core.Render.StringToString(template,parent);
// output:
// "This is nested value. Yeah to the power of 123"
Lo más hermoso de Mustache es que la misma plantilla exacta funciona exactamente igual en JavaScript puro o en cualquiera de los 20 idiomas compatibles.