发现jade一个致命伤~~~这种情况下没法处理~~求解决方案
发布于 12 年前 作者 by5739 6131 次浏览 最后一次编辑是 8 年前

比如jsp…我在controller有个list传过来…想输出到js里面…供页面js调用…我可以这么写

<script>
    var aList = {};
    <% for obj in list {%>//<--此处用了jsp循环的伪代码
        aList[<%=obj.id%>] = '<%=obj.name%>';
    <%}%>
</script>

好吧…你看…jade能怎么写啊

看jade的文档: jade文档相关内容

根据文档上下文…script标签里面的全是text…不会去给你解析标签的 即使你写 - each xx in xxx…

7 回复

我的解决思路是先把那个 list 转成 json,然后把 json 字符串塞进前端的 js 里,不知道能不能解决楼主的疑问。

jade:

script
  var raw = JSON.parse('!{list}');  // 用 json 字符串做中介
  console.log(raw);
  var aList = {};
  for (i in raw) {
      console.log(i);
      aList[raw[i].id] = raw[i].name;
  }
  console.log(aList);

express:

exports.index = function(req, res){
  // res.render('index', { title: 'Express' })
  res.render('test', {
    title: 'Express',
    list: JSON.stringify([
      {id:1, name:'a'},
      {id:2, name:'b'},
      {id:3, name:'c'}
    ])  
  }); 
}

囧,Jada 直接把 scritpt 当成 literal 语法块的哇

对哦,这样的话我贴代码里的第二行直接写成

var raw = !{list}; 

就行了

这个确实是个问题哇…

试了一下,输出是这样的啊

var aLists = [object Object],[object Object];

目前的解决方案如此:

<script>
|    $(function(){
|        var teams = {};
- each team in teams
    |teams[!{team.id}] = '!{team.name}';
|        $('.datetimepicker').datetimepicker({dateFormat:'yy-mm-dd'});

|        $('#team1').change(function(){
|            alert('ok');
|        });
|    });
</script>

果断用起 ejs

回到顶部