将smarty数组转换为javascript数组

时间:2013-05-30 22:49:35

标签: javascript 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用作datepicker中的可用日期。 因此,尝试将以上内容转换为以下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';

任何人都应该以正确的方式指导我。

1 个答案:

答案 0 :(得分:7)

如果您Smarty security settings允许它(具体地说,它在$php_modifiers中),您可以使用PHP的json_encode功能:

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

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