2012-11-23 13 views
5

Pracuję w ramach template toolkit. Mam typ danych hash perla w moim pliku tt. Chcę przekonwertować ten typ danych hash na typ danych javascript hash.jak konwertować hasl w języku Perl na javascript hash

Kod: szablon:

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

teraz chcę hash mi być dostępny w javascript

+3

Pytanie jest interesujące, ale nie da się na nie odpowiedzieć bez kodu. –

+0

Perl: moja $ vars = { 'version' => 3,14, 'dzień' => [qw (pon wt śr czw pt so nd)], 'cgi' => CGI-> new() "mnie" => { 'id' => 'abw', 'name' => 'Andy Wardley', }, }; szablon: Email [% me.name %]

To jest wersja [wersja%%]

Id: [% me.id%] Nazwa: [% me.name%] teraz chcę hash mnie do być dostępne w javascript – Kalai

+0

@Kalai Edytuj swoje pytanie i dodaj je (z formatowaniem kodu) zamiast dodawać je w komentarzu. Trudno go odczytać i łatwiej go przeoczyć, ponieważ jest to komentarz. – Thor84no

Odpowiedz

2

Spróbuj użyć JSON z CPAN. Jest to JavaScript Simple Object Notation i używasz go bezpośrednio w 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'}); 

wyjściowa:

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

jak uzyskać dostęp do encode_json ($ vars -> {'me'}); w pliku tt? – Kalai

+0

Jeśli "użyłeś' go, powinieneś być w stanie powiedzieć 'JSON :: encode_json' w twoim tt. – simbabque

+0

Wystąpił mi następujący błąd, po umieszczeniu tego kodu w moim pliku tt "encode_json" nie został wyeksportowany przez moduł JSON – Kalai

3

Istnieje kilka wtyczek TT dostępne, aby to zrobić, z których każdy byłby lepszym rozwiązaniem niż osadzanie surowego perla w szablonie. Osobiście wolę JSON::Escape, ale jest kilka innych. Przez ponad 5 lat pisania TT w mniej lub bardziej codziennych sytuacjach nigdy nie musiałem uciekać się do stosowania dyrektywy [% PERL %]. Nie przypuszczam, że nie piszę CGI. YMMV.

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

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