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);
Если вы разместите образец шаблона и небольшой скрипт, который показывает ошибку, вам будет легче сказать наверняка.