2012-11-23 51 views
5

我正在template toolkit框架中工作。我的tt文件中有一个perl hash数据类型。我想将此散列数据类型转换为JavaScript散列数据类型。如何将perl散列转换为javascript散列

代码: 模板:

 [% PERL %] 
     use JSON qw(encode_json); 

     my $vars = { 

      'version' => 3.14, 
      'days'  => [ qw(mon tue wed thu fri sat sun) ], 
      'cgi'  => CGI->new(), 
      'me'  => { 
       'id'  => 'abw', 
       'name' => 'Andy Wardley', 
      }, 
     }; 

     my $json = encode_json($vars->{'me'}); 
    [% END %] 


<script> 
    function callme(){ 
    var me = [% $json %] 
    } 
</script> 

现在我想我的哈希可访问的JavaScript

+3

这个问题很有趣,但无法在没有代码的情况下回答它。 –

+0

的Perl: 我的$瓦尔= { '版本'=> 3.14, '天'=> [QW(周一周二周三周四周五周六周日), 'CGI'=> CGI->新() 'me'=> { 'id'=>'abw', 'name'=>'Andy Wardley', }, }; 模板: Email [% me.name %]

这是版本[%版本%]

ID:[%me.id%] 名称:[%me.name%] 现在我想我的哈希可以在javascript中访问 – Kalai

+0

@Kalai编辑你的问题,并添加它(与代码格式),而不是像在评论中那样添加它。这很难阅读,更容易错过,因为这是一条评论。 – Thor84no

回答

2

尝试使用JSON从CPAN。它是JavaScript Simple Object Notation,你直接在JavaScript中使用它。

use JSON qw(encode_json); 

my $vars = { 

    'version' => 3.14, 
    'days'  => [ qw(mon tue wed thu fri sat sun) ], 
    'cgi'  => CGI->new(), 
    'me'  => { 
     'id'  => 'abw', 
     'name' => 'Andy Wardley', 
    }, 
}; 
print encode_json($vars->{'me'}); 

输出:

{"name":"Andy Wardley","id":"abw} 
+0

如何访问encode_json($ vars - > {'me'});在tt文件中? – Kalai

+0

如果你使用了'''',你应该能够在你的tt中说'JSON :: encode_json'。 – simbabque

+0

它引发了以下错误,一旦我把这段代码放到我的tt文件中 “encode_json”没有被JSON模块导出 – Kalai

3

有提供这样做有几个T​​T的插件,其中的任何一个会比原始嵌入的perl到您的模板更好的解决方案。我个人更喜欢JSON::Escape,但还有其他几个。在多于5年的TT或多或少的日常写作中,我从来没有必须诉诸于使用[% PERL %]指令。我想,我不是在写CGI。因人而异。

[%- USE JSON.Escape(pretty => 1); 
    SET me = { id => 'abw', name => 'Andy Wardley' }; 
... 
-%] 

<script> 
    function callme() { 
    var me = [% me.json %] 
    ... 
</script>