CGI :: Application param()没有设置

时间:2014-07-05 00:32:31

标签: perl templates param cgi-application perl-html-template

我有一段使用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'字符串)。我也知道它实际上运行代码,因为这个die Dumper是在我尝试设置值之后。

模板文件包含以下代码:

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

任何帮助都将不胜感激。

编辑:

这是给予参数的内容:

  

[             {               'date'=> '2006-07-05',               'avg_gain'=>民主基金,               'bollinger_mid'=> '32 0.80000' ,               'symbol'=> 'BBQ'             },             {               'date'=> '2006-04-04',               'avg_gain'=>民主基金,               'bollinger_mid'=> '34 0.55656' ,               'symbol'=> 'AAPL'             }             ...   ]

1 个答案:

答案 0 :(得分:2)

这实际上是一个HTML :: Template问题,CGI :: Application默认使用它进行模板化。

您的die_on_bad_params来电可能会将load_tmpl设置为0吗?如果您尝试设置加载的模板中不存在的参数(docs here),则HTML :: Template应默认为die。当die_on_bad_params被禁用时,您将获得您正在描述的行为,其中忽略并丢弃未知模板参数。

此外,according to the docsTMPL_LOOP将hashref的arrayref作为其param参数。也许这会传递你的“符号”参数:

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

如果你发布了一个示例模板和显示错误的小脚本,那么肯定会更容易说出来。