javascript中的聪明变量

时间:2010-08-04 10:54:40

标签: javascript smarty

我正在尝试在tpl里面的javascript中使用smarty变量

{literal}
<script language="javascript">
  google.load('visualization','1',{'packages': ['geomap']});
  google.setOnLoadCallback(drawMap);


  function drawMap() {
    var data = new google.visualization.DataTable();
    data.addRows(4);
    data.addColumn('string', 'Location');
    data.addColumn('number', 'Number of links');

{/literal}{foreach from=$last5 item=link name=links key=index}
    data.setValue({$index},0,'{$link.location|replace:'\'':'\\\''}');
    data.setValue({$index},1,{$link.location_count});
{/foreach}{literal}

    var options = {};
    options['dataMode'] = 'regions';
    options['region'] = 'world';

    var container = document.getElementById('map');
    var geomap = new google.visualization.GeoMap(container);

    geomap.draw(data, options);
  };
</script>
{/literal}
你可以建议我一个解决方案

3 个答案:

答案 0 :(得分:13)

在插入smarty变量之前,只需关闭{literal}标记,然后重新打开它。

或者使用{ldelim}和{rdelim}作为您从Smarty分配值的代码片段。

答案 1 :(得分:7)

{literal}
function doSomething(myNumber){
  var result = myNumber/{/literal}{$myDivider}{literal};
  // rest of code...
}
// more functions...
{/literal}

{literal}
function doSomething(myNumber){
{/literal}
   var result= myNumber/{$myDivider};
{literal}
  // rest of code...
}
// more functions...
{/literal}

function doSomething(myNumber){ldelim}
   var result= myNumber/{$myDivider};
   // rest of code below...
{rdelim}

function doSomeMore(another){ldelim}
   alert('{$myHello}');
   // more code
{rdelim}

OR(使用Smarty 3.x及更高版本,不需要文字等)

function doSomething(myNumber){
   var result = myNumber/{$myDivider};
   // rest of code 
}

在Smarty 3中,左边的大括号旁边有一个空格字符(空格,制表符或换行符),不应再乱用Smarty逻辑了。使用新版本解决了问题:)

答案 2 :(得分:0)

尝试(karvonen)后答案[虽然我没有尝试{rdelim},但只尝试{literal}],我的ajax请求出现问题,它停止从服务器获取任何日期在JS中聪明的突破后加载。所以,我所做的是将smarty值分配给hidden field(我知道这不是最聪明的事情),然后从JS请求该值并将其分配给变量。 希望这可以帮助。

相关问题