smarty界定符与JS冲突的问题

#1 SunPSP

方便跟习惯,我将smarty的界定符设置为{}
之前一直没发现问题
今天在模板中加入了JS,然后就报错了
貌似是写在模板中的JS函数界定符跟SMARTY的界定符冲突了
感觉这不应该啊,smarty这么多年了,可以说是久经考验了
怎么会有这个问题呢?而且记得以前也是用过的,貌似没这个问题啊
求解

附上错误提示:
Smarty Error: Syntax Error in template
"E:\SunP\WebServer\root\sunp/admin/template\index.html" on line 13
"$('ul.sp-nav-main li').click(function(){$(this).next(".sp-nav-sub").toggle();});"
- Unexpected "(", expected one of: "{" , "identifier"

2013-03-20 06:00:56

#2 jake

Smarty从早期就一直有解决这个问题。

解决方法手册有写 http://www.speedphp.com/smarty/language.escaping.html

在smarty2里面,就是通过手册里面写的方法,用literal来进行界定

不过在smarty3里面,比较先进了,如果大括号附近没有字符,那么就直接当作JS/CSS看,所以一般情况,不会有冲突。

这就是smarty3的$auto_literal的新配置。http://www.speedphp.com/smarty/variable.auto.literal.html

所以,这SpeedPHP里面,我们的例子,大部分都是用 <{}> 作为限定符

2013-03-20 07:14:34

#3 SunPSP

jake 发表于 2013-3-20 07:14
Smarty从早期就一直有解决这个问题。

解决方法手册有写 http://www.speedphp.com/smarty/language.escapin ...
感谢J大,已解决
$(function(){
  $('ul.sp-nav-sub').hide();
  $('ul.sp-nav-main li').click(function(){$(this).next(".sp-nav-sub").toggle();});
})
因为句子够短第二对大括号未换行就报错

$(function(){
  $('ul.sp-nav-sub').hide();
  $('ul.sp-nav-main li').click(function() {
    $(this).next(".sp-nav-sub").toggle();
  });
})
如此换行即可,SMARTY这是在教我要断行缩进不能偷懒?
悲催我还折腾N个小时没辙来这求助呢

2013-03-20 08:58:51

#4 jake

SunPSP 发表于 2013-3-20 08:58
感谢J大,已解决
$(function(){
  $('ul.sp-nav-sub').hide();
应该不是,是因为smarty最早的时候,JS还不流行缩成一行来写。所以smarty就用了这种大括号的方式。

现在应该很少模板引擎会直接用大括号来做限定符了。

2013-03-20 09:10:04