Как конвертировать Perl-хэш в Javascript-хэш

5

Я работаю в шаблоне инструментария. У меня есть perl хэш-тип данных в моем файле tt. Я хочу преобразовать этот хэш-тип данных в jashcript хэш-тип данных.

код: шаблон:

        [% 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: my $ vars = {'version' => 3.14, 'days' => [qw (понедельник, четверг, воскресенье)], 'cgi' => CGI-> new (), 'me' => { 'id' => 'abw', 'name' => 'Andy Wardley',},}; шаблон: <a href="mailto:[% email %]"> Email [% me.name%] </a> <p> Это идентификатор версии [% version%] </ p>: [% me.id %] Имя: [% me.name%] теперь я хочу, чтобы хэш me был доступен в javascript
Показать ещё 4 комментария
Теги:
template-toolkit

2 ответа

3

Для этого доступно несколько плагинов TT, любое из которых было бы лучшим решением, чем встраивание raw perl в ваш шаблон. Лично я предпочитаю JSON:: Escape, но есть и другие. За более чем 5 лет написания ТТ более или менее ежедневно, мне еще не приходилось прибегать к использованию директивы [% PERL %]. Полагаю, я не пишу CGI. YMMV.

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

<script>
    function callme() {
    var me = [% me.json %]
    ...
</script>
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?
  • 0
    Если вы use d, вы должны иметь возможность сказать JSON::encode_json в вашем tt.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню