2011-12-24 17 views
5

sto provando jsRender.jsrender if-else utilizzando {{= propName}}

Quello che voglio fare:

JS modello:

<script id="theaterTemplate" type="text/x-jquery-tmpl"> 
    {{* 
     if ("{{=theaterId}}" == getCurrentTheaterId()) { 
    }} 
     <a class="active" href="#"> 
    {{* 
     } else { 
    }}   
     <a href="#">   
    {{* } }} 
     {{=theaterName}} 
    </a> 
</script> 

In altre JS:

function getCurrentTheaterId() { 
    return "523"; 
} 

In sostanza, nel modello, se la corrente id teatro di iterazione corrisponde ciò che è restituito dalla funzione js, quindi impostare la classe su attivo. "{{= TheaterId}}" si interrompe nella condizione if. Immagino che non ti sia permesso di accedere alle attuali proprietà json nella condizione if.

Qualche idea su come fare questo?

Speriamo che abbia un senso. Grazie!

risposta

6

Nel loro programma di esempio hanno questo:

$.views.allowCode = true;/ 

http://borismoore.github.com/jsrender/demos/step-by-step/11_allow-code.html

[Edit]

Devi 'dire' jsRender sulla funzione esterna. Ecco un esempio di lavoro:

<script type="text/javascript"> 
     function IsSpecialYear() 
     { 
      return '1998'; 
     } 

     // tell jsRender about our function 
     $.views.registerHelpers({ HlpIsSpecialYear: IsSpecialYear }); 

    </script> 

    <script id="movieTemplate" type= "text/html"> 

     {{#if ReleaseYear == $ctx.HlpIsSpecialYear() }} 
      <div style="background-color:Blue;"> 
     {{else}} 
      <div> 
     {{/if}} 
      {{=$itemNumber}}: <b>{{=Name}}</b> ({{=ReleaseYear}}) 
     </div> 

    </script> 

    <div id="movieList"></div> 

<script type="text/javascript"> 

    var movies = [ 
     { Name: "The Red Violin", ReleaseYear: "1998" }, 
     { Name: "Eyes Wide Shut", ReleaseYear: "1999" }, 
     { Name: "The Inheritance", ReleaseYear: "1976" } 
    ]; 

    $.views.allowCode = true; 

    $("#movieList").html(
     $("#movieTemplate").render(movies) 
    ); 

</script> 

[EDIT 2] A più complicata condizione booleana:

function IsSpecialYear(Year, Index) 
    { 
     if ((Year == '1998') && (Index == 1)) 
      return true; 
     else 
      return false; 
    } 

    // tell jsRender about our function 
    $.views.registerHelpers({ HlpIsSpecialYear: IsSpecialYear }); 

</script> 

<script id="movieTemplate" type= "text/html"> 

{{#if $ctx.HlpIsSpecialYear(ReleaseYear, $itemNumber) }} 
    <div style="background-color:Blue;"> 
{{else}} 
    <div> 
{{/if}} 
+0

dispiace, avrei detto che ho già. –

+0

Ho modificato il mio post originale con un codice di esempio. –

+0

Grazie Steve. Dalla mia descrizione, la {{= theaterId}} nella condizione if è la parte che si rompe, non la parte della funzione. Grazie mille. –

2

& & non è stato supportato fino ad un recente candidato beta si sono resi disponibili. La quantità di logica che potevi fare in modo dichiarativo nel modello era limitata e non includeva & & o ||. Tuttavia il supporto per gli operatori di confronto è ora molto completo. Ci sono alcuni esempi qui: http://borismoore.github.com/jsrender/demos/step-by-step/10_comparison-tests.html

+0

FYI: Boris Moore è l'autore di jsRender e jsViews! –

Problemi correlati