Подтвердить что ты не робот

Выполнение функции javascript внутри шаблона нефрита

Я новичок в nodejs и пытаюсь создать файл jade для содержимого html 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)}

Насколько я понял, capize вызывается во время компиляции jade, и функция недоступна, поскольку тег script также скомпилирован в html. Каков наилучший способ для меня оценить этот вызов а) серверная сторона или б) клиентская сторона?

спасибо

4b9b3361

Ответ 1

Вам нужно определить функцию в области jade, а не в JS, которую вы создаете:

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

но, вероятно, лучше иметь его вне шаблона и передать ссылку на объект-помощник

Ответ 2

Я понимаю, что это действительно старо, но когда вы объявляете функцию в нефрите, вам нужно сделать

script.

not

script

период делает разницу и позволит jade подобрать, что это на самом деле кусок кода, а не HTML.

Ответ 3

Под этим #{capitalize(itemName)} вы пытаетесь вызвать функцию, которая передается шаблону с контроллера (back-end).

Например (/routes/index.js):

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

В index.jade

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

где

языки

- это функция, определенная ранее, которая принимает некоторый параметр.