将Smarty数组转换为JavaScript数组

3
我有一个Smarty数组。
$promoFormData  Smarty_Variable Object (3)
                        ->value = Array (1)
                            deliveryDates => Array (3)
                                 0 => Array (2)
                                      startDate => "2013/06/05"
                                      endDate => "2013/06/28"
                                1 => Array (2)
                                      startDate => "2013/07/05"
                                      endDate => "2013/07/28"
                                2 => Array (2)
                                      startDate => "2013/08/05"
                                      endDate => "2013/08/28"

我希望在日期选择器中使用数组deliveryDates作为可用日期。 因此,尝试将上述内容转换为以下JavaScript数组

var ranges = [ { start: new Date(2013, 06, 05), end: new Date(2013, 06, 28) },
               { start: new Date(2013, 07, 05), end: new Date(2013, 07, 28) },
               { start: new Date(2013, 08, 05), end: new Date(2013, 07, 28) } ];

我尝试使用以下代码:

 <script>
    var js_array = new Array();
    {{foreach from=$promoFormData.deliveryDates item=array_item key=id}}
        {{foreach from=$array_item item=sub_array_item key=index}}
            js_array['{{$id}}']['{{$index}}'] = '{{$sub_array_item}}';
        {{/foreach}}
    {{/foreach}}

    console.log(js_array);
</scirpt>

我遇到了以下错误:

     TypeError: js_array[0] is undefined
     js_array['0']['startDate'] = '2013/06/05';

请有经验的人帮我指明正确的方向。


我不知道你在问什么。数组字面量“有效”(请注意,在JavaScript中new Date(2013, 06, 05)是2013年7月5日)。您发布的脚本不是JavaScript。您是否尝试在服务器上使用Smarty创建JavaScript数组文字?所以这真的只是一个Smarty问题吗? - RobG
@RobG 是的,我正在尝试使用Smarty数组在JavaScript中创建数组文字。在这里,我使用Smarty循环遍历数组。 - Swathi
1个回答

9

如果你的 Smarty 安全设置 允许它(特别是在 $php_modifiers 中),你可以使用 PHP 的 json_encode 函数:

var js_array = {$promoFormData.deliveryDates|json_encode};

由于JSON是实际JavaScript对象文字语法的严格子集,因此这应该为您提供有效的JS声明。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接