从外部javascript访问模板_工具包变量
如果这是一个有点愚蠢的问题,我道歉 我正在使用dancer和template_工具包显示一些数据库查询的结果。我下面的代码似乎不像我希望的那样工作 在我的dancer.pl脚本中,我有:从外部javascript访问模板_工具包变量,javascript,template-toolkit,dancer,Javascript,Template Toolkit,Dancer,如果这是一个有点愚蠢的问题,我道歉 我正在使用dancer和template_工具包显示一些数据库查询的结果。我下面的代码似乎不像我希望的那样工作 在我的dancer.pl脚本中,我有: get '/dbqr' => sub { if (not session('logged_in') ) { send_error ("Not logged in", 401); } my $db = connect_db();
get '/dbqr' => sub {
if (not session('logged_in') )
{
send_error ("Not logged in", 401);
}
my $db = connect_db();
my $sql = io->file('file.sql')->slurp; # Read an entire file
my $sth = $db->prepare($sql) or die $db->errstr;
$sth->execute or die $sth->errstr;
set_flash("Pulled data from db");
template 'show_entries.tt', {
'msg' => get_flash(),
'add_entry_url' => uri_for('/add'),
'entries' => $sth->fetchall_hashref('system_id'),
};
};
在我的show_entries.tt中
some other html
<script type="text/javascript" src="app.js"></script>
some other html
再次道歉,如果这是一个门槛问题。。。我环顾四周,没有找到明显的答案
谢谢这不是一个愚蠢的问题。请记住所涉及的处理阶段。当任何Javascript在浏览器中执行时,TT的服务器端呈现已经结束。因此,TT代码必须做出安排,以生成JS需要的任何内容 如果要使用单独的app.js文件,它只能包含js。(如果将JS内联到模板中,还有一些其他选项。) 但基本上可以归结为这样的事情: ==show_entries.tt===
[%- USE JSON.Escape; -%]
<script type="text/javascript" src="app.js"></script>
<script>
var entries = [% entries.json %];
</script>
这足以让你上路吗
注意:在将数据库对象直接转换为JSON对象时,您确实需要小心谨慎,原因如下:
[%- USE JSON.Escape; -%]
<script type="text/javascript" src="app.js"></script>
<script>
var entries = [% entries.json %];
</script>
window.onload = function () {
for (entry in entries) {
console.log( "Entry Text: %s", entry.text ); //where 'text' is an attribute of the original TT entries hash
}
};