Pregunta

he tenido un error que me ha estado molestando durante días. Soy bastante nuevo a nodo y el sistema de plantillas de modo Jade oso conmigo: estoy mirando para agregar las hojas de estilo en la forma siguiente:

app.js (Express):

app.get('/', loadUser, function(req, res) {
 var User = req.user;
 // console.log(User.groups[2]);
 // var groups = User.groups.split(',');
 // OK DUh. This only gets called when the client has the script Socket.IO
 // and client runs socket.connect()

 getMessages(User, function(messages) {

  var locals = {
   scripts: [
    'https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js',
    'index.js'
   ],

   stylesheets: [
    'index.css'
   ],

   user : User,
   messages: messages
  };

  console.log('ok');

  res.render('app.jade', {locals : locals});

 });

});

En layout.jade (que se ejecuta con app.jade) Tengo:

!!! 5
html
 head
  title UI
  link(rel='stylesheet', href = 'stylesheets/reset.css')
  link(rel='stylesheet', href = 'stylesheets/layout.css')
  - var stylesheets = stylesheets || [];
            #{stylesheets}
  - each stylesheet in stylesheets
   - if(stylesheet.indexOf('http') >= 0)
    link(rel='stylesheet', href = stylesheet)
   - else
    link(rel='stylesheet', href = "stylesheets/"+stylesheet )

Y mucho más ... Sigo corriendo en el mismo error:

9. ' - if(stylesheet.indexOf(\'http') >= 0)'

Object function () {
  var o = {}, i, l = this.length, r = [];
  for(i=0; i
  for(i in o) r.push(o[i]);
  return r;
} has no method 'indexOf'

Ahora .. el Gotcha es que funciona esta plantilla exactas en otra aplicación que pases en las mismas variables exactas: Realmente agradecería cualquier sugerencia que ustedes tienen en este espinoso tema

Gracias! Matt Mueller

¿Fue útil?

Solución

Así que aquí está el problema ...

en esta línea:

res.render('app.jade', {locals : locals});

está de paso en los locales ==> locales, lo cual es un hash (bueno, por lo que soy un tipo Perl, creo JS los llama 'matrices asociativas')

Así que ahora dentro de su plantilla de jade tenemos la línea:

 - var stylesheets = stylesheets || []; 

Dentro de JADE, se han definido las variables "locales", pero todo lo demás está oculto bajo que, por lo que las variables "hojas de estilo" no está definido (locals.stylesheets se define en su lugar). Por lo que esta línea de código establece las "hojas de estilo" variable a "[]"

Así que aquí es donde tengo que especular. "IndexOf" es un método del objeto de matriz. Tal vez las matrices construidas dentro JADE no tienen este método mientras que las matrices construidas en Node.js tiene este método. Lo que explicaría por qué se obtiene un error al intentar llamar "stylesheets.indexOf (...)"

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top