50 votes

Comment accéder aux variables d'instance dans le moteur CoffeeScript dans un modèle Slim

J'ai un Rails de contrôleur dans lequel je suis à la définition d'une variable d'instance -

@user_name = "Some Username"

Dans mon .slim de modèle, je suis en utilisant le café du moteur pour générer le javascript et voulez imprimer le nom d'utilisateur du client-sie code javascript -

coffee:
  $(document).ready ->
    name = "#{@user_name}"
    alert name

Mais c'est le javascript qui est généré??

$(document).ready(function() {
    var name;
    name = "" + this.my_name;
    alert(name);
}

Comment puis-je contrôleur d'accès aux variables d'instance dans ma CoffeeScript code??

Je suis ce marquage comme haml depuis que je devine haml auront le même problème lors de l'utilisation de CoffeeScript .

93voto

Trevor Burnham Points 43199

Ce qui se passe c'est qu' "#{@user_name}" est interprété comme CoffeeScript, pas que du code Ruby qui est évalué et injecté dans le CoffeeScript source. Vous demandez: "Comment puis-je injecter un Rubis variable dans mon CoffeeScript source?"

La réponse courte est: ne faites pas cela. Les Rails de l'équipe d'une décision intentionnelle de ne pas soutenir intégré CoffeeScript dans les modèles en 3.1, parce qu'il y a une surcharge de performance significatifs afin d'avoir à compiler CoffeeScript sur chaque demande (que vous avez à faire si vous avez autorisé des chaînes arbitraires à être injectés dans la source).

Mon conseil est au service de vos Ruby variables séparément en tant que pur JavaScript, et faire référence à ces variables à partir de votre CoffeeScript, par exemple:

javascript:
  user_name = "#{@user_name}";
coffee:
  $(document).ready ->
    name = user_name
    alert name

32voto

nathanvda Points 25878

J'ai tendance à éviter le javascript en ligne à tout prix.

Un bon moyen de stocker des variables dans votre code HTML, à utiliser à partir de votre code javascript, consiste à utiliser les attributs de données HTML5. C'est idéal pour garder votre javascript discret.

7voto

Bob. Points 1279

Voici un excellent épisode de Railscast sur la question générale de l’accès aux variables Ruby dans les fichiers JavaScript / CoffeeScript qui pourrait vous être utile. http://railscasts.com/episodes/324-passing-data-to-javascript

2voto

gene tsai Points 19

Vous pouvez aussi utiliser:

 $(document).ready ->
  name = <%= JSON.generate @user_name %>
  alert name
 

En effet, JSON est un sous-ensemble de JavaScript.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X