2012-11-23 12 views
5

Convert Ich arbeite in template toolkit Rahmen. Ich habe einen Perl-Hash-Datentyp in meiner TT-Datei. Ich möchte diesen Hash-Datentyp in Javascript Hash-Datentyp konvertieren.wie man Perl Hash zu Javascript Hash

Code: Vorlage:

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

jetzt will ich die mir Hash zugänglich sein, in Javascript

+3

Die Frage ist interessant, aber es ist unmöglich, sie ohne Code zu beantworten. –

+0

Perl: my $ vars = { 'Version' => 3.14, 'Tage' => [qw (Mo Di Mi Do Fr sa so)], 'cgi' => CGI-> new(), 'mich' => { 'id' => 'abw', 'name' => 'Andy Wardley', }, }; Vorlage: Email [% me.name %]

Dies ist die Version [% version%]

Id: [% me.id%] Name: [% me.name%] jetzt will ich die mir Hash in JavaScript zugänglich sein – Kalai

+0

@Kalai Bearbeiten Sie Ihre Frage und fügen Sie sie (mit Code-Formatierung), anstatt es so in einem Kommentar hinzufügen. Es ist schwer zu lesen und leichter zu übersehen, weil es ein Kommentar ist. – Thor84no

Antwort

2

Versuchen JSON von CPAN verwenden. Es ist JavaScript Simple Object Notation und Sie verwenden es direkt in 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'}); 

Ausgang:

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

wie auf encode_json zugreifen ($ vars -> {'me'}); in der tt-Datei? – Kalai

+0

Wenn du es benutzt hast, solltest du JSON :: encode_json in deinem tt sagen können. – simbabque

+0

es wirft mir den folgenden Fehler, sobald ich diesen Code in meine TT-Datei "encode_json" wird nicht von der JSON-Modul – Kalai

3

Es gibt mehrere TT-Plugins zur Verfügung, dies zu tun, von denen jede eine bessere Lösung als das Einbetten roh Perl in Ihre Vorlage wäre. Persönlich bevorzuge ich JSON::Escape, aber es gibt ein paar andere. In mehr als 5 Jahren TT mehr oder weniger täglich zu schreiben, musste ich noch nie auf die [% PERL %] Richtlinie zurückgreifen. Ich denke nicht, dass ich CGI schreibe. YMMV.

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

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