首页 文章

jade模板里面的javascript函数执行

提问于
浏览
15

我是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编译期间调用了大写,并且该函数不可用,因为脚本标记也被编译到html中 . 在a)服务器端或b)客户端评估此呼叫的最佳方式是什么?

谢谢

3 回答

  • 7

    你需要在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)}
    

    但最好将它放在模板之外并将引用传递给helpers对象

  • 4

    我知道这很老了,但是当你在玉器中声明一个函数时,你需要这样做

    script.
    

    script
    

    这个时期有所不同,并且允许jade接受它实际上是一段代码,而不是HTML .

  • 19

    通过这个 #{capitalize(itemName)} ,您正在尝试调用从控制器(后端)传递给模板的函数 .

    例如 (/routes/index.js)

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

    index.jade

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

    哪里

    是前面定义的函数,它接受一些参数 .

相关问题