2012-11-23 23 views
5

Tôi đang làm việc trong khung template toolkit. Tôi đã có một perl hash datatype trong tập tin tt của tôi. Tôi muốn chuyển đổi kiểu dữ liệu băm này thành kiểu dữ liệu băm javascript.cách nhúng perl băm vào hàm băm javascript

mã: mẫu:

 [% 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> 

bây giờ tôi muốn tôi băm để có thể truy cập trong javascript

+3

Câu hỏi thú vị, nhưng không thể trả lời câu hỏi này mà không cần mã. –

+0

Perl: my $ vars = { 'phiên bản' => 3.14, 'days' => [qw (mon tue wed thu fri sat sun)], 'cgi' => CGI-> new(), 'me' => { 'id' => 'abw', 'tên' => 'Andy Wardley', }, }; mẫu: Email [% me.name %]

Đây là phiên bản [% phiên bản%]

Mã sản phẩm: [% me.id%] Tên: [% me.name%] bây giờ tôi muốn băm tôi có thể truy cập được trong javascript – Kalai

+0

@Kalai Chỉnh sửa câu hỏi của bạn và thêm câu hỏi (với định dạng mã) thay vì thêm nó như thế trong một nhận xét. Thật khó để đọc và dễ dàng hơn để bỏ lỡ bởi vì nó là một bình luận. – Thor84no

Trả lời

2

Hãy thử sử dụng JSON từ CPAN. Đó là JavaScript Simple Object Notation và bạn trực tiếp sử dụng nó trong 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'}); 

Output:

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

cách truy cập encode_json ($ vars -> {'me'}); trong tệp tt? – Kalai

+0

Nếu bạn đã sử dụng 'nó', bạn sẽ có thể nói' JSON :: encode_json' trong tt của bạn. – simbabque

+0

nó ném cho tôi lỗi sau, khi tôi đặt mã này vào tệp tt "encode_json" không được xuất bởi mô-đun JSON – Kalai

3

Có một số plugin TT sẵn để làm điều này, bất kỳ trong số đó sẽ là một giải pháp tốt hơn vì nhúng perl thô thành mẫu của bạn. Cá nhân tôi thích JSON::Escape, nhưng có một số khác. Trong hơn 5 năm viết TT trên cơ sở hàng ngày hoặc ít hơn, tôi chưa bao giờ phải sử dụng chỉ thị [% PERL %]. Tôi không viết CGI, tôi cho là vậy. YMMV.

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

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