防止服务器端jade解释浏览器jade模板

时间:2013-01-06 10:27:10

标签: templates browser express pug

我想将jade模板从服务器中的玉器模板传递给浏览器。

我的问题是,目前服务器正在解释玉模板......

以下是我宣布模板的方式:

script#entry-row(type='text/template')
  tr
    td= number
    td= sum + '€'
    td= description || '' 
    td= moment(date, 'YYYY-MM-DDTHH:mm:ss:SSSZ').format('dddd DD MMMM YYYY') 
    td 
      span.label= category
    td 
      input(type='checkbox', disabled='disabled', checked=shared)

我找到的唯一解决方案是在行开头添加一个管道,但这不是一个好方法:

script#entry-row(type='text/template')
  | tr
  |   td= number
  |   td= sum + '€'
  |   td= description || '' 
  |   td= moment(date, 'YYYY-MM-DDTHH:mm:ss:SSSZ').format('dddd DD MMMM YYYY') 
  |   td 
  |     span.label= category
  |   td 
  |     input(type='checkbox', disabled='disabled', checked=shared)

还有其他想法吗?

2 个答案:

答案 0 :(得分:1)

我最近在这方面困扰了好几天,我找到了更好的解决方案。

您可以将jade partial模板重命名为html扩展名,并将其包含在主

玉页。所以jade不会尝试在服务器端编译包含的部分,而你

在浏览器端获得了你想要的东西。

以下是我的示例编码:

index.jade:

extends layout

block content
  .container
    .header
      a= title
      .input-append
        input.input-medium(type="text", placeholder="电子邮箱")
        button.btn(id='subscribe') 订阅
      .clear
    .row-fluid 
      .span8
        ul.tweets
      .span3

        ul.users


  script#tweet-template(type='template')
    include templates/tweet.html

和部分 templates / tweet.html

li
  .media
    img.pull-left(src=tweet.user_img)
    .media-body
      h5.media-heading= tweet.user_name
      p.text 
        span #{tweet.text}
        - if (tweet.pic_name != '') {
          br
          img.img-polaroid(src='/images/tweets/' + tweet.pic_name + '_thumb.jpg', class='thumb_img')
          img.img-polaroid(src='/images/tweets/' + tweet.pic_name + '_middle.jpg', class='middle_img')
        - }
      p.tail 
        - if (tweet.pic_name != '') {
          a(href='/images/tweets/' + tweet.pic_name + '_large.jpg') 查看大图
        - }
        span.time #{tweet.create_at} 
        转发(#{tweet.reposts_count}) 评论(#{tweet.comments_count})

答案 1 :(得分:0)

正在使用express

可能的解决方案可能是JadeAsset。另见讨论here

您可以将资产挂钩到Express:

assets.on('complete', function() {
    var app = express.createServer();
    app.configure(function() {
        app.use(assets);  // that's all you need to do
    });
    app.listen(8000);
});

创建您的Jade资产:

var assets = new AssetRack([
    new rack.JadeAsset({
        url: '/templates.js',
        dirname: __dirname + '/templates'
    })
]);