CNode

发现jade一个致命伤~~~这种情况下没法处理~~求解决方案

Bby5739发布于14 年前最后回复14 年前7 回复6923 浏览0 收藏

比如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...

查看回复

回复 (6)

X
xiongliding#1·14 年前

我的解决思路是先把那个 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'}
    ])  
  }); 
}
F
fish#2·14 年前

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

X
xiongliding#3·14 年前
引用 fish囧,Jada 直接把 scritpt 当成 literal 语法块的哇

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

var raw = !{list}; 

就行了

J
jin52yang#4·14 年前

这个确实是个问题哇...

B
by5739#5·14 年前

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

var aLists = [object Object],[object Object];
B
by5739#6·14 年前

目前的解决方案如此:

<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>
参与回复
登录后即可参与回复。登录