2009-11-17 10 views
9

Ho sentito uno sviluppatore di rails dire che RJS è malvagio. Non l'ho mai usato da quando sono sempre riuscito a fare quello che volevo usando il javascript classico o il jQuery, quindi non ho prestato attenzione. Ora sto entrando in qualche codice legacy e c'è RJS dappertutto.RJS è cattivo e perché?

Quindi ... è vero? Quali sono gli svantaggi/vantaggi dell'utilizzo di RJS?

+0

Che cosa significa stand RJS? – JaredPar

+1

@JaredPar Ruby Javascript – Joseph

+2

LOL - all'inizio pensavo che questo fosse "RMS" e mi chiedevo cosa avessi contro Richard Stallman oi quadrati medi alla radice. –

risposta

30

Parliamo di cosa sia RJS prima di capire se è malvagio.

RJS applica lo stesso livello di astrazione alle librerie Javascript ad alto funzionamento che ActiveRecord fornisce per SQL. Tuttavia, la copertura RJS per le librerie Javascript non è neanche lontanamente completa come la copertura degli adattatori SQL di ActiveRecord.

Rails viene fornito con il supporto RJS solo per Prototype/Script.aculo.us. Tuttavia, ci sono plugin disponibili o in sviluppo per supportare altre librerie Javascript. Ad esempio JRails riscrive gli helper basati su Prototype per lavorare con jQuery. Esistono plugin simili per mootools e probabilmente Dojo.

Le persone che ritengono che RJS sia malvagio, sono in genere quelli che non si sentono a proprio agio nel produrre codice Prototype o coloro che ritengono di poter realizzare le cose più facilmente con JavaScript non elaborato.

RJS non è perfetto, proprio come ActiveRecord non è perfetto, ogni tanto devi scendere a scrivere Javascript o SQL raw per portare a termine il tuo lavoro. Anche in questo caso, come ActiveRecord, più ti senti a tuo agio con le opzioni avanzate più puoi ottenere senza scrivere il codice raw.

Una cosa meravigliosa di RJS è che sono essenzialmente viste, che producono Javascript. È molto semplice estrarre RJS in partial che possono essere inclusi se necessario, come risposte ai controller o come parte delle funzioni JavaScript personalizzate incluse nella pagina. Questo rende il codice molto più ASCIUTTO permettendo una manutenzione più semplice.

Personalmente uso spesso RJS. Lo trovo il modo perfetto per toccare un sacco di elementi DOM contemporaneamente. Viene fornito con il doppio vantaggio di permettermi di creare siti ricchi di AJAX, senza scrivere molto Javascript. Poi di nuovo odio scrivere Javascript.

+1

+1 per una risposta eccellente e concisa che spiega pro e contro. Come novizio RoR mi chiedo sempre se dovrei usare RJS nella mia applicazione o usare una libreria come jQuery e gestirla da sola. –

+1

Una grande risposta, grazie! –

+0

+1: Kudos EmFi! Non so nulla di RJS o di rubino. (Bene, OK, so che esistono ...) Ho dato un +1 come discusso i fatti su ciò che RJS è e le motivazioni per perché alla gente piace e non piace RJS. Molto bene! –

5

Considerando che sostituisco la mia libreria sottostante di Prototype con JQuery sui miei progetti Rails, ho trovato che RJS è piuttosto utile. Ora, può essere un dolore a volte come passare JavaScript al server per essere eseguito non è ancora esattamente mainstream.

Tuttavia, non ho riscontrato problemi con RJS in generale. L'unica lamentela che ho è che di solito devo mescolare sia RJS che plain vecchio Javascript nei miei file .rjs, quindi è un po 'inutile. Ma ti dà un posto pulito/modo per gestire i tuoi effetti Javascript e le chiamate AJAX, quindi penso che sia un "posto standard dove mettere il tuo codice", è piuttosto carino.

+0

Grazie per la risposta! Puoi inserire jQuery/classic javascript in un file .rjs? – marcgg

+1

@marcgg - Se si utilizza JRails (http://github.com/aaronchi/jrails), è possibile inserire JQuery in esso. Tuttavia, il classico Javascript funzionerà indipendentemente dalla libreria che utilizzi. C'è un modo speciale per inserirlo comunque. Controlla http://dev-journal.3dmdesign.com/development/qa-how-to-javascript-in-rjs-templates per maggiori informazioni. –

3

Non so se sarei arrivato così lontano da dire male, ma RJS (o qualsiasi linguaggio lato server che genera JS) non sarebbe la mia prima scelta. Preferisco scrivere JS a mano. Con jQuery mi diverto davvero a scrivere JS e mantenere il mio JS in application.js è semplicemente pulito.

Per espandere un po '... Vedo RJS come un'astrazione superflua. Voglio sapere JavaScript e jQuery. Voglio sapere come manipolare il DOM e come effettuare chiamate AJAX. E con la mia conoscenza JS/jQuery posso passare a anotherframework facilmente e non mi chiedo se il framework gestirà il mio JS per me.

+0

RJS è un file JavaScript con Ruby incorporato. È un problema separato da JavaScriptHelpers ecc. Che ti permette di fare cose come: page.insert_html: bottom, 'list', content_tag ("li", "Fox") – MattMcKnight

+0

Esatto, stai scrivendo il codice Ruby per generare JavaScript e se questo funziona per te, allora è fantastico. Non è solo per me. –

+0

Immagino che non sia quello che chiamo RJS. I modelli RJS sono più simili ai file html.erb - i modelli per la restituzione di JS al browser da valutare come risposta a una chiamata AJAX. Potrebbero essere tutti JS codificati a mano, ma inserendo il rubino, interpolate i valori dal resto del programma. – MattMcKnight

1

RJS è bello soprattutto perché è facile da integrare nei progetti Rails. Per semplificare le cose e mantenere basso il numero di file, è possibile incorporarlo nei controller e dispone di numerosi helper facili da utilizzare dalle librerie prototype/scriptaculous. Sembra molto più simile a Ruby.

Significa che non è separato in modo pulito dal normale codice Rails, poiché viene mescolato con il resto del codice abbastanza velocemente. Richiede anche che molte più librerie esterne vengano incluse tramite i file js di prototipo e scriptaculous.

Alcune delle cose di jQuery sono molto pulite. La sintassi è piuttosto folle, ma significa che puoi estrarre completamente il tuo js dalle tue pagine/controller (non invadente) che è un modo molto più pulito/compartimentato di fare le cose.

Cosa c'è di più, jQuery sembra come javascript. Quindi non si ottiene quel mix strano di codice javascript e Ruby. Mi piace Ruby. Non mi piace Javascript. Ma mi piace il mix dei due ancora meno. Se conosci JS, ti sembrerà familiare.

Ryan Bates ha uno screencast sulla conversione di RJS in jQuery. Potrebbe darti una buona idea della differenza tra i due sintatticamente: http://railscasts.com/episodes/136-jquery

+0

"Cosa c'è di più, jQuery sembra come javascript, quindi non si ottiene quel mix strano di codice javascript e Ruby." Questo argomento è a ritroso. Con gli helper, non ottieni il codice JavaScript nel codice che ottieni: page.insert_html: bottom, 'list', content_tag ("li", "Fox") – MattMcKnight

+0

Questo è se stai discutendo per RJS . Se sto discutendo per JS, non voglio il codice Ruby nel mio JS. Ci sono ancora molti casi in cui ottenere la corretta funzionalità JS, finisco per usare JS piuttosto che tutti questi "helper". È solo più facile. E con jQuery, riesco a spostare tutto del mio codice Ruby e in Javascript e utilizzare gli helper solo quando necessario. – Lukas

1

Se non si ha familiarità con JS (o framework come Prototype), ma è necessaria una funzionalità AJAX, RJS è il modo migliore per farlo. Un altro vantaggio dell'uso di RJS è la velocità. Scrivi codice RJS facile e veloce.

Ho usato RJS in tutti i progetti di Rails prima. Ora ho più familiarità con Prototype (e jQuery) ed è il motivo per cui ora sto scrivendo il codice JS. Ho bisogno di questo, perché il controller che ha un sacco di RJS ha perso la sua produttività. E spostare il codice RJS in JS è stato il primo passo per scalare il controller.

Nessuno può dirti assolutamente, qual è il modo migliore: utilizzare RJS o no. Ognuno dovrebbe scegliere la propria strada.

Ad esempio, preferisco usare RJS nella parte di amministrazione (dove non è necessario scalare nulla) della mia app e scrivere JS per la parte di frontend.

1

RJS non è "male", ma credo che il problema con esso è duplice:

  1. E 'difficile (impossibile?) Per fare JavaScript discreto con RJS. Se stai scrivendo un'applicazione pesante per Javascript e hai molta logica, e la logica cambia, dovrai cambiare un numero ragionevole di file invece di uno solo. Inoltre, e questa è una preferenza personale, è piuttosto brutto vedere tag con Javascript compresso sparsi su di esso.

  2. RJS astrae Javascript, che può portare all'ignoranza della lingua. L'idea alla base di RJS era quella di consentire a uno sviluppatore di scrivere tutto per un'applicazione web (a parte l'HTML e il CSS che probabilmente un progettista avrebbe dovuto affrontare) usando solo una lingua: Ruby, ma in pratica ciò non è sufficiente nello stesso modo che è possibile, ma non consigliato, creare applicazioni ASP.NET trascinando e rilasciando i controlli o utilizzando un sacco di codice pesante che genera Wizards. Se tutto ciò di cui hai bisogno è una soluzione semplice che richiede uno sprink di Ajax, allora RJS funziona correttamente.

RJS è un buon strumento quando si è appena iniziato con Rails e hanno bisogno di alcuni effetti "rapido e sporco" Ajax che vengono utilizzati con parsimonia (per esempio, il commento canonica per un blog che sfuma nel sullo stesso pagina). Una volta che si inizia a richiedere un uso intenso di Javascript, RJS diventa più di una responsabilità perché protegge lo sviluppatore da qualcosa che dovrebbe davvero cercare di capire.

+0

Non è la forma più discreta di JavaScript che JavaScript non vedi? – MattMcKnight

+0

RE: Punto 2. Conosco molti sviluppatori che non riescono a scrivere un servizio Web senza utilizzare alcun tipo di strumento, né eseguono refactoring senza l'aiuto di un IDE. Penso che il problema sia lo sviluppatore, non lo strumento –

0

RJS è semplicemente l'equivalente JavaScript di RHTML (ora noto come html.erb). È un modello che esegue Ruby incorporato e restituisce JavaScript al browser per aggiornare la pagina. Ciò consente di avere un controller maggiore su ciò che accade come risultato di un'azione lato server in un'applicazione AJAX. In effetti, i risultati di una chiamata RJS vengono valutati dall'interprete JavaScript nel browser. Confrontalo con un'applicazione AJAX non RJS in cui il server restituisce l'HTML che viene inserito nella pagina dal callback per la richiesta asincrona.

La parte "cattiva" è che molte persone sono a disagio con "eval", ma penso che potrebbe anche essere il risultato di una sorta di confusione.

Molte delle risposte qui sembrano incentrate sugli helper JavaScript, Prototype e Scriptaculous, che vengono spesso utilizzati, ma non sono richiesti, come parte del modello RJS. Faccio un ampio uso di questi helper mentre fluiscono meglio con il codice Ruby nei template, ma non sono una parte necessaria di RJS.

Problemi correlati