CGI::Application param() не устанавливается

У меня есть кусок кода, который использует CGI::Application как его база, но что-то не работает правильно.

Когда я пытаюсь установить что-то через $Template->param() это вроде бы не устанавливает. $Template равно $self->load_tmpl($template);

И часть, которую я хочу сохранить:

$Template->param('symbols' => \%a_hash_ref);

я знаю \%a_hash_ref содержит ожидаемое значение. Имеет похожую форму:

{'symbol' => 'DTX'},{'symbol' => 'QFLD'}

Кроме того, если я делаю

$Template->param('Hey!xD' => 'Something');

это не спасает, но

$Template->param($Pagination);

делает, где $Pagination также hash_ref.

Я знаю, что все значения являются такими, какими они должны быть, и я также попробовал это с некоторыми простыми строками, которые должны работать, но они не установлены. Я знаю это, потому что когда я бегу:

my @params = $Template->param();
die Dumper \@params;

он выводит все переменные, которые он должен был установить, но ожидаемые (включая 'Hey!xD' строка) отсутствуют. Я также знаю, что он на самом деле выполняет код, потому что этот Dumper умирает после того, как я пытаюсь установить значения.

Файл шаблона содержит этот фрагмент кода:

$ (document).ready (function () {mainFunction ('[% symbol%]');});

Любая помощь будет оценена.

РЕДАКТИРОВАТЬ:

Вот что дается параметру:

[{'date' => '2006-07-05', 'avg_gain' => undef, 'bollinger_mid' => '32.80000 ',' symbol '=>' BBQ '}, {' date '=>' 2006- 04-04 ',' avg_gain '=> undef,' bollinger_mid '=> '34.55656', 'symbol' => 'AAPL'}...]

1 ответ

Решение

На самом деле это проблема HTML::Template, которую CGI::Application использует по умолчанию для шаблонов.

Возможно, у вас есть die_on_bad_params установить 0 в вашем load_tmpl вызов? HTML::Template должен по умолчанию умереть, если вы попытаетесь установить параметр, который не существует в загруженном шаблоне ( документы здесь). когда die_on_bad_params отключено, вы получите поведение, которое вы описываете, где неизвестный параметр шаблона игнорируется и отбрасывается.

Кроме того, согласно документам, TMPL_LOOP принимает массив хеш-ссылок в качестве param аргумент. Может быть, это поможет передать ваш параметр "symbols" следующим образом:

my $symbols = [{ symbol => 'DTX' },{ symbol => 'QFLD' }];
$Template->param(symbols => $symbols);

Если вы разместите образец шаблона и небольшой скрипт, который показывает ошибку, вам будет легче сказать наверняка.

Другие вопросы по тегам