Ainda quando o ASP.NET MVC ainda era um projeto alpha começaram a aparecer os que amaram o framework (eu por exemplo) e os do detestaram. Um dos assuntos era a ausênsia de tagligs, o HtmlHelper e código nativo em meio ao html. E não poderia ser por menos pois muitos gostavam das taglibs pois assim sem o código nativo do meio de seu html deixava (segundo os simpatizantes das taglibs) o código mais limpo. Era um “buzuzu” por causa disso sem limites.
Mas taglibs não deixam de serem helpers não é mesmo?
Bem, no motor padrão de renderização das views do ASP.NET MVC usamos as tags <% %> para inserirmos nossos códigos nativos. Eu não tenho nada contra o código nativo no html, afinal, é apenas lógica de visualização, loops e coisas assim. Porém, para os mais exigentes o ASP.NET MVC traz uma opção para nosso motor de views, o Spark.
Spark é um projeto open-source de um motor de views para tornar nosso código mais amigável. Por exemplo, ao invés de usarmos <% %> nas views usamos ${}. Realmente é mais simpático não é mesmo?
Podemos ver um exemplo com mais recursos do spark no código abaixo:
<viewdata products="IEnumerable[[Product]]"/>
<ul if="products.Any()">
<li each="var p in products">${p.Name}</li>
</ul>
<else>
<p>No products available</p>
</else>
Segundo o autor do Spark, a idéia é “deixar o html tomar conta do código e seu fluxo”. E realmente é o que acontece, podemos ver dentro de uma <ul> um if, algumas tags <else>, um each dentro de um <li>.
E como acontece a mágica?
É só você adicionar o SparkViewFactory a sua coleção de ViewEngines (além de é claro, bairxar as assemblies do framework e referenci-alas ao seu projeto ASP.NET MVC). Veja o exemplo abaixo:
protected void Application_Start(object sender, EventArgs e)
{
ViewEngines.Engines.Add(new SparkViewFactory());
}
Além disso podemos definir algumas configurações para o nosso motor de views como por exemplo, definir algumas namespaces para fazerem referência em todas as nossas views. Veja a definição de algumas configurações no código abaixo:
protected void Application_Start(object sender, EventArgs e)
{
var settings = new SparkSettings()
.SetDebug(true)
.SetPageBaseType("Your.NonDefault.BaseSparkView")
.AddAssembly("YourAssembly")
.AddNamespace("System")
.AddNamespace("System.Collections.Generic")
.AddNamespace("System.Linq")
.AddNamespace("System.Web.Mvc");</code>
ViewEngines.Engines.Add(new SparkViewFactory(settings));
}
Você pode também definir essas configurações no Web.Config.
Temos ainda outros motores como o NHaml, uma implementação do Haml de Ruby para os motores de views do ASP.NET MVC. Esse está disponível como parte do MVC Contrib.
Fica ai mais uma dica para melhorar nosso trabalho no ASP.NET MVC. Agora os “amigos do webforms” não tem mais do que reclamar.
[]´s
Particularmente não fui com a cara desse Spark.
Parece pouco natural.
Mas é muito bom termos diferentes opções.
Abraços
Olá Juliano,
muito legal esse Spark, bem melhor do que a forma padrão, mas durante minhas últimas pesquisas acabei achando o NHaml, já ouviu falar?
http://code.google.com/p/nhaml/
http://code.google.com/p/nhaml/wiki/NHamlLanguageReference
Só de bater o olho eu já fui com a cara desse NHaml, agora estou estudando ele, fica bem enxuto o código da view =D
Leandro,
Eu conhecia sim, ele é semelhante a engine de Rails e se não me engano utiliza par aisso a linguagem Boo.
São sempre ótimas engines que são mais fluentes que a padrão do MVC né.
[]´s