126 votes

Comment passer des variables du modèle jade de fichier pour un fichier de script?

J'ai de la difficulté avec une variable (config) a déclaré dans un modèle jade fichier (index.jade) qui n'est pas passé à un fichier javascript, ce qui permet alors de mon javascript crash. Voici le fichier (vues/index.jade):

h1 #{title}

script(src='./socket.io/socket.io.js')
script(type='text/javascript')
  var config = {};
  config.address = '#{address}';
  config.port = '#{port}';
script(src='./javascripts/app.js')

Voici une partie de mon app.js (côté serveur):

  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(__dirname + '/public'));
});

app.configure('development', function(){
  app.set('address', 'localhost');
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});

app.configure('production', function(){
  app.use(express.errorHandler());
});

// Routes

app.get('/', function(req, res){
  res.render('index', {
    address: app.settings.address,
    port: app.settings.port
});
});

if (!module.parent) {
  app.listen(app.settings.port);
  console.log("Server listening on port %d",
app.settings.port);
}

// Start my Socket.io app and pass in the socket
require('./socketapp').start(io.listen(app));

Et voici une partie de mon fichier javascript qui se bloque (public/javascripts/app.js):

(function() {
        var socket = new io.Socket(config.address, {port: config.port, rememberTransport: false});

Je fais tourner le site sur le mode de développement (NODE_ENV=développement) sur localhost (ma propre machine). Je suis l'aide d'un noeud-inspecteur de débogage, qui m'a dit que la variable de config n'est pas défini dans public/javascripts/app.js.

Des idées?? Merci!!

185voto

Merc Points 1935

C'est un peu tard mais...

script.
  loginName="#{login}";

Cela fonctionne bien dans mon script. Dans l'Express, je suis en train de faire ceci:

exports.index = function(req, res){
  res.render( 'index',  { layout:false, login: req.session.login } );
};

Je suppose que la dernière jade est différent?

Merc.

edit: ajout de "." après le script pour éviter de Jade avertissement.

3voto

Varun Singh Points 372

Voir cette question: JADE + EXPRESS: l'Itération sur l'objet dans inline code JS (côté client)?

Je vais avoir le même problème. Jade ne pas transmettre des variables locales (ou n'importe quel template à tous) pour javascript, scripts, il passe simplement le bloc entier en tant que texte littéral. Si vous utilisez les variables locales "adresse" et "port" dans votre Jade fichier au-dessus de la balise de script, ils doivent s'affichent.

Les solutions possibles sont énumérées dans la question que j'ai lié ci-dessus, mais vous pouvez soit: - passer chaque ligne en tant que non échappés de texte (!= au début de chaque ligne), et tout simplement "-" devant chaque ligne de code javascript qui utilise une variable locale, ou: - Passer des variables par le biais d'un élément du dom et de l'accès via JQuery (laid)

Il n'y a pas de meilleure façon? Il semble que les créateurs de Jade ne voulez pas multiligne prise en charge de javascript, comme le montre ce thread sur GitHub: https://github.com/visionmedia/jade/pull/405

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