私はnodejsを初めて使用し、htmlコンテンツのjadeファイルを作成しようとしていますmyfile.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
生成する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)}
しかし、テンプレートの外にそれを持ち、ヘルパーオブジェクトに参照を渡す方がおそらく良いです
これは本当に古いと思いますが、jadeで関数を宣言するときは、
script.
ない
script
ピリオドは違いを生み、翡翠がHTMLではなく実際にコードであることを認識できるようにします。
これによって#{capitalize(itemName)}
は、コントローラー(バックエンド)からテンプレートに渡される関数を呼び出そうとしています。
たとえば(/ routes/index.js):
res.render('index', { title: 'Express test', fs : { echo : lang} });
index.jadeにいる間
a(href='/register') #{fs.echo('xxx')}
どこ
lang
いくつかのパラメーターを取る、以前に定義された関数です。