書き方 - javascript 関数 一覧



Jadeテンプレート内でのJavaScript関数の実行 (2)

私はnodejsに不慣れで、htmlコンテンツmyfile.jade用のjadeファイルを作成しようとしています。ファイルの内容は次のとおりです。

extends layout
block content
   script
     function capitalize(s) { 
       console.log("Testing js exec");
       return s.charAt(0).toUpperCase() + s.slice(1); 
     };
  table
    - each item in list
      tr
        td
          a(href="/collection/#{item.name}") #{capitalize(itemName)}

ただし、実行すると次のエラーが発生します。

Error: mweb/views/collections.jade:8
    6|   script
    7|     function capitalize(s) { 
  > 8|       console.log("Testing js exec");
    9|       return s.charAt(0).toUpperCase() + s.slice(1); 
    10|     };

unexpected text ;

console.logを削除すると、次のようなエラーメッセージが表示されます。

TypeError: mweb/views/collections.jade:18
  > 18|             a(href="/collection/#{item.name}") #{capitalize(itemName)}

私の知る限りでは、jadeのコンパイル中にcapitalizeが呼び出されていて、scriptタグもhtmlにコンパイルされているため、この機能は使用できません。 この呼び出しをa)サーバー側またはb)クライアント側で評価させるための最良の方法は何ですか?

THX

https://src-bin.com


Answer #1

これで#{capitalize(itemName)}あなたはコントローラからテンプレートに渡された関数を呼び出そうとしています(バックエンド)。

例えば(/routes/index.js)

res.render('index', { title: 'Express test', fs : { echo : lang} });

index.jadeの中に

 a(href='/register') #{fs.echo('xxx')}

どこで

ラング

前に定義した関数で、何らかのパラメータを取ります。


Answer #2

生成したJSではなく、jadeの範囲で関数を定義する必要があります。

block content
   -  function capitalize(s) { return s.charAt(0).toUpperCase() + s.slice(1); };
  table
    - var list = ['one', 'two']
    - var itemName = 'test test'
    - each item in list
      tr
        td
          a(href="/collection") #{capitalize(itemName)}

しかしおそらくそれはテンプレートの外に持っていて、ヘルパーオブジェクトへの参照を渡すほうが良いです。





pug