5

Uso Rails 3.2.9. Quando aggiungo il codice CoffeeScript a un file .js.coffee nella directory /app/assets/javascripts, ottengo il codice JavaScript risultante in tutte le mie pagine Web. Il problema è tutto il codice JavaScript è avvolto in:Set di classi e metodi CoffeeScript/JavaScript disponibili per il resto dell'app Rails

(function() { 
    // my code 
}).call(this); 

Quindi i metodi io definisco non sono visibili in qualsiasi altro codice CoffeeScript scrivo in altri file. Qual è il modo corretto di scrivere una serie di classi e metodi riusabili di CoffeeScript con Rails?

risposta

7

La cosa più semplice da fare è assegnare un nome a tutte le classi. Se l'applicazione si chiama "app" poi nel codice di inizializzazione prima di ogni altra cosa succede:

// Set up the namespace. 
window.app = { } 

e poi in tutti i file .coffee:

class app.Pancakes 
    #... 

Poi si avrebbe un namespace globale e si 'd riferimento tutto attraverso quel namespace:

pancakes = new app.Pancakes 

Allo stesso modo per le funzioni semplici:

Esistono vari modi per impostare e nascondere parzialmente lo spazio dei nomi, ma sono tutte variazioni su quanto sopra e il semplice namespaces funziona bene con la pipeline di asset di Rails.

+0

Dov'è il posto giusto per impostare lo spazio dei nomi? application.js? la visualizzazione del layout? –

+0

@at: qualsiasi cosa venga colpita per prima cosa. Non sono sicuro che sopravviverà in un file manifest di 'application.js', ma immagino che lo farebbe. Potresti anche lanciarlo nel tuo layout prima del resto dei tag script. –

+0

Ho creato un file con un '_' all'inizio, come' _my_stuff.js.coffee'. In questo modo viene caricato prima di tutto e posso impostare 'window.app = {}' prima dell'altro codice che dipende da esso. –

4

Inoltre, è possibile definire le classi all'interno dei file CoffeeScript come questo:

class this.Person 
    constructor: (attr = {}) -> 
    ... 

In questo modo, le definizioni sono attaccati al namespace globale.

+0

Questo è qualcosa che stavo cercando. Ero davvero infastidito dal fatto che con Coffeescript stavo giocando con namespace con 'window.name = name'. Generalmente utilizzo Rails 4+ per la maggior parte delle applicazioni, quindi Coffeescript è soprattutto la ciliegina sulla torta per me, e questo ha reso la mia giornata! –

Problemi correlati