SparkViewEngine: Iterazioni

Nel post precedente ho mostrato come è possibile ridurre il numero di righe di codice presenti all’interno della skin quando ci si trova a dover gestire dei blocchi di if per la visualizzazione di porzioni di Html. Ovviamente all’interno delle nostre Views non ci troviamo soltanto ad utilizzare i vari if/elseif/else, ma sicuramente andremo a creare delle iterazioni che ci permettono di mostrare un set di contenuti, come potrebbe essere l’elenco delle ultime news.

L’approccio è lo stesso, ed in questi due blocchi di codice (engine classic e spark) possiamo notare come è possibile evitare la sintassi di apertura e di chiusura del ciclo:

<%for (int i = 0; i < Model.Categories.Count; i++){%>
    <li class="category">
        <%= Model.Categories[i].Name%>
    </li>
<%}%>
<li class="category" each="var Category in Model.Categories">
    ${Category.Name}
</li>

Ovviamente volendo è possibile usare una sintassi leggermente differente, e quindi senza l’attributo each per un tag container: in questo caso è sufficiente utilizzare il tag for, come mostrato di seguito:

<for each="var Category in Model.Categories">
    <li class="category">
        ${Category.Name}
    </li>
</for>

Come potete vedere in questa situazione, anche se non si ha un vantaggio nel numero di righe scritte, si ha comunque un vantaggio in leggibilità del codice.

Sicuramente in alcuni casì c’è però la necessità di essere a conoscenza dell’esatta posizione in cui ci si trova all’interno del ciclo,  del numero totale di elementi, oppure di sapere se si è all’inizio o alla fine dello stesso: il problema è risolto grazie a Spark, che mette a disposizione, tramite un’apposita name convention, delle proprietà che ci restituiscono queste informazioni, come mostrato di seguito:

<for each="var Category in Model.Categories">
    ItemIndex = ${CategoryIndex}
    TotalItems = ${CategoryCount}
    IsFirstItem = ${CategoryIsFirst}
    IsLastItem = ${CategoryIsLast}
</for>

Come potete vedere basta aggiungere in coda all’item corrente (category nell’esempio) un suffisso, il resto lo fa Spark.

Enjoy it.


Comments