2010-11-16 16 views
6

Qualcuno ha provato a utilizzare jQuery templates (o qualsiasi altro modello basato su JavaScript) sul lato server con qualcosa come env.js?jQuery modelli sul lato server

Sto pensando di provare a vedere quali vantaggi potrebbero essere ottenuti rendendo disponibili modelli identici sul lato client o server di un'applicazione Web, ma speravo che qualcuno potesse già avere qualche esperienza o sapere di un progetto esistente facendo questo. Sarei particolarmente interessato a conoscere eventuali problemi di prestazioni che potrei incontrare rispetto a un motore di modelli più tradizionale.

Per ricapitolare: qualcuno ha mai usato modelli jQuery sul sito del server? Se sì, ci sono stati problemi di prestazioni o altri problemi che potrei incontrare?

+0

Che cosa è esattamente la tua domanda? (vedi anche [Esiste un motore di template per Node.js?] (http: // StackOverflow.it/questions/1787716/is-there-a-template-engine-per-node-js)) –

+0

Il lato server è più affidabile perché lato client non si conosce le specifiche degli utenti e potrebbe ridurre drasticamente le prestazioni sul lato utente – RobertPitt

+2

Potresti dare un'occhiata al blog @ getify (http://blog.getify.com/) - si lamenta della parità di meccanismi di templating e validazione tra client e server * per tutto il tempo * – Pointy

risposta

0

Un mio amico che lavorava su un progetto di programmazione genetica distribuito utilizzava un sistema di modelli laterali js sevrer per gestire tutti gli operatori Web generati su tutti i browser degli utenti. Il suo codice è qui: github. Non so quanto sarà utile, ma so che è stato abbastanza semplice da implementare e ha fatto cose incredibili. Da quanto è stato facile trovarlo, consiglierei un sistema di template js.

0

È piuttosto banale scrivere codice lato server per elaborare i modelli jQuery.

Questo è il some very basic vb.net code che ho creato per restituire il risultato di una stringa di modello jquery a una matrice di qualsiasi oggetto. Attualmente lo fa solo la sostituzione di dati di valori

Public Shared Function RenderTemplate(template As String, list As Array) As String 
    Dim myRegexOptions As RegexOptions = RegexOptions.Multiline 
    Dim myRegex As New Regex(strRegex, myRegexOptions) 
    Dim splits = myRegex.Split(template) 
    Dim matches = myRegex.Matches(template) 

    Dim i As Integer = 0 
    Dim swap As Boolean = False 
    Dim str As New StringBuilder 
    For Each item In list 
     swap = False 
     For i = 0 To splits.Length - 1 
      If swap Then 
       str.Append(CallByName(item, splits(i), CallType.Get, Nothing)) 
      Else 
       str.Append(splits(i)) 
      End If 
      swap = Not swap 
     Next 
    Next 
    Return str.ToString 
End Function 

Quindi, se ho inviato il seguente ...

Dim strTargetString As String = "<p><a href='${Link}'>${Name}</a></p>" 
Dim data As New Generic.List(Of TestClass) 
data.Add(New TestClass With {.Link = "http://stackoverflow.com", .Name = "First Object"}) 
data.Add(New TestClass With {.Link = "http://stackexchange.com", .Name = "Second Object"}) 
Return Render(strTargetString, data.ToArray) 

Sarebbe uscita come una stringa

<p><a href='http://stackoverflow.com'>First Object</a></p> 
<p><a href='http://stackexchange.com'>Second Object</a></p> 

Questo funziona molto più veloce di generare un falso oggetto browser sul server ed eseguire l'intera libreria jQuery solo per sostituire alcuni tag.

+0

È facile per rendere i modelli di caso più semplici, ma cosa succede quando i modelli includono le chiamate di funzione alle funzioni JavaScript (cosa non rara negli scenari del mondo reale)? È difficile senza usare JavaScript sul lato server. –

4

env.js non necessario.

<plug shameless="true">

Io sono nel processo di specing e ri-attuazione modelli JQuery per consentire loro di essere usate indipendentemente DOM. Vedi https://github.com/mikesamuel/jquery-jquery-tmpl-proposal per codice e demo. La specifica è disponibile al numero http://wiki.jqueryui.com/w/page/37898666/Template e riporta:

Testo-centrico piuttosto che dipendente dal DOM. Stato: fatto. Vedi la sezione 12 implementazioni. foo $ {bar} si traduce in qualcosa di molto simile alla funzione (dati, opzioni) {return "foo" + bar; } Con modulo alcuni dethunking di bar

...

Questo permetterà di utilizzare questo motore di template nel lato server javascript ambiente, come node.js o Java/rinoceronte

mi piacerebbe feedback e può aiutarti a iniziare.

</plug>