在Jade中,为什么我有时会按原样使用变量,而在其他时候必须将它们包含在#{......}中?

时间:2013-02-05 14:15:17

标签: express pug

请查看以下代码

        for story in book 
            if story.title.length < 140
                - var storyTitle = story.title;
            else
                - var storyTitle = story.title.substring(0, 140) + '...';

            .tiles
                a(href= 'http://' + story.link)
                    img(src=story.thumbnail, width='150', height='150')
                p Title: #{storyTitle}
                p Date: #{story.time}
                p Author: #{story.authorName}

这对我有用。然而,它告诉我,在tmes我可以使用story.attribute,并且在必须使用#{story.attribute}的地方。

例如。如果我使用该行

p Title: storyTitle

没有胡须,它只是在浏览器中打印字符串“Title:storyTitle”。

另一个例子,如果我使用img(src=#{story.thumbnail}, width='150', height='150'),它不起作用,我在浏览器中得到一个html字符串(%20%20 ......某事......)。

是什么给了什么?

2 个答案:

答案 0 :(得分:7)

简单地说

  

等号(=)后,内部代码块没有花括号。其他地方都使用#{}

答案 1 :(得分:4)

区别在于标签的内容和属性。在属性中,您可以使用不带大括号的变量,例如

img(src=story.thumbnail

因为你不能只将文本放在属性值中,所以它必须是一个字符串:

img(src="/images/story.jpg")

你不能只做

img(src=/images/story.jpg)

但是在标签的内容中,你必须使用hash + braces #{},这样Jade知道哪些位是变量,哪些位只是文本。

如果要在标记属性中使用hash + braces,可以这样做:

img(src="#{story.thumbnail}")