0

私は何日も私を悩ませてきたバグを抱えています。私はNodeとJadeテンプレートシステムにかなり慣れていないので、我慢してください。次の方法でスタイルシートを追加しようとしています。

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});

 });

});

layout.jade(app.jadeで実行されます)には、次のものがあります。

!!! 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 )

さらに...私は同じエラーに遭遇し続けます:

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'

さて、落とし穴は、この正確なテンプレートが、まったく同じ変数を渡す別のアプリケーションで機能することです。この厄介な問題について、皆さんからの提案をいただければ幸いです。

ありがとう!マットミューラー

4

1 に答える 1

2

これがあなたの問題です...

この行で:

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

あなたはローカルを渡しています==>ローカル、これはハッシュです(わかりました、私はPERLの人です、JSはそれらを「連想配列」と呼んでいると思います)

これで、翡翠テンプレートの中に次の行があります。

 - var stylesheets = stylesheets || []; 

JADE内では、変数「locals」を定義しましたが、他のすべてはその下に隠されているため、変数「stylesheets」は定義されていません(代わりにlocals.stylesheetsが定義されています)。したがって、このコード行は変数「stylesheets」を「[]」に設定します

だからここで私は推測しなければなりません。「indexOf」はArrayオブジェクトのメソッドです。おそらく、JADE内で構築された配列にはこのメソッドがありませんが、node.jsで構築された配列にはこのメソッドがあります。これは、「stylesheets.indexOf(...)」を呼び出そうとするとエラーが発生する理由を説明します。

于 2011-08-09T20:21:07.637 に答える