Sto cercando di utilizzare una funzione javascript viala Chrome Console quando inserisco la funzione javascript all'interno di Rails Asset Pipeline Manifest. Ecco i passaggi che ho preso per creare e configurare una semplice App di Rails 4.2.4
$ rails new JavascriptExample
$ cd JavascriptExample
$ rails g scaffold Bear name:string
$ rake db:migrate
Quindi modificare il app/assets/javascripts/bears.coffee
e aggiungere un registro della console e una funzione.
console.log("asset pipeline sucks")
square = (x) -> x * x
Quindi accendo il server
$ rails s
visito localhost:3000/bears
e nella Console di Chrome vedo che la mia prima riga di codice ha funzionato. Tuttavia quando provo il comando square(5);
in console ricevo un errore Uncaught ReferenceError: square is not defined(…)
Perché non posso farlo in questo modo quando questa funzione è chiaramente caricata in application.js
?
risposte:
1 per risposta № 1Questo è ciò che il tuo coffeescript è stato compilato in javascript
(function() {
var square;
console.log("asset pipeline sucks");
square = function(x) {
return x * x;
};
}).call(this);
A partire dal Questo: the var keyword is reserved in CoffeeScript, and will trigger a syntax error if used. Local variables are created implicitly by default
, quindi non è disponibile in ambito globale come vostra aspettativa
Per farlo funzionare, possiamo fare qualcosa del genere, invece:
console.log("asset pipeline sucks")
@square = (x) -> x * x
Nota che abbiamo @
E ora il javascript compilato sarà:
(function() {
console.log("asset pipeline sucks");
this.square = function(x) {
return x * x;
};
}).call(this);