从外部JavaScript访问template_toolkit变量
access template_toolkit variable from external javascript
如果这是一个有点愚蠢的问题,请道歉。
我正在使用dancer和template_toolkit来显示某些数据库查询的结果。我在下面的代码似乎没有按照我希望的方式工作。
在我的 dancer.pl 脚本中,我有:
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
在我的应用程序中.js我想对数据库获取中的条目做一些事情( $sth->fetchall_hashref('system_id') )...
例如
window.onload = function () {
console.log( "[% entries %]" );
};
再次道歉,如果这是一个门槛问题...看了看,没有找到明显的答案。
谢谢
这不是
一个愚蠢的问题。请记住所涉及的处理阶段。当任何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>
=== 应用程序.js ===
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
}
};
这足以让你上路吗?
注意:在将数据库对象直接转换为 JSON 对象时,您确实需要小心一点,原因如下:
- 编码器能够编码的内容存在限制;
- 你可能会得到非常大的物体;
- 生成的 JSON 对象将在页面源代码中可见,因此公开所有属性和方法可能(将)存在安全风险。
您可能会发现需要创建一些其他"简单"对象,其中包含 app.js 所需的最小字符串化输出。这可能必须在 Dancer 代码中处理。
相关文章:
- 将函数的上下文应用于javascript变量
- 无法导出函数expressjs/requestjs中的变量
- 函数参数中的数据与指定变量之间的任何性能差异
- 将PHP变量传递给jQuery时遇到问题
- 如何通过ajax刷新JSF填充的javascript变量
- 参数变量出现ngTable指令问题
- 通过javascript重定向html传递php变量
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- 全局变量和全局对象的属性之间有什么区别吗
- 如何在Bootstrap Modal中为动态点击生成的变量设置jade属性
- 值对象在某个变量发生更改后发生更改
- Javascript变量赋值|
- AngularJS-在JSON选择器中使用变量名
- Javascript计数器变量未显示正确的值
- delete关键字在全局变量上的不同行为
- 如何在php变量中嵌入JQuery代码
- ReactJS映射:如何仅在url变量不为空时呈现html链接
- 在javascript函数中设置全局变量
- 将变量传递给外部Javascript
- 如何将getJson的响应保存在全局变量中