【问题标题】:Perl Dancer, Dancer::Plugin::DirectoryView, Template Toolkit and sharing params in templatesPerl Dancer、Dancer::Plugin::DirectoryView、模板工具包和模板中的共享参数
【发布时间】:2011-12-28 21:11:19
【问题描述】:

我有一个发布路线,它返回参数以在特定模板 (actions.tt) 中使用。在该模板中,我使用 DirectoryView 插件加载了一个带有目录视图 (dirmain.tt) 的 div(使用 jQuery)。我的问题是我需要在渲染主模板(action.tt)之前将参数传递给 DirectoryView 模板。参数(dev)需要包含在目录列表中。

Perl 部分:

Use Dancer;
....
post "/" => sub {
template 'actions.tt', {
    'dev' => param('dev'),
};

模板:

actions.tt

....
<div id="dir">
    <script type="text/javascript">
          $('#dir').load('/files/[% dev %]');
    </script>
</div>
....

dirmain.tt

....
how do I pass [% dev %] here before the action.tt is rendered by the browser?
....

使用某种钩子可以实现这一点吗? 非常感谢您的帮助。谢谢!

【问题讨论】:

  • “渲染”?通过浏览器?还是在 Perl 编译 actions.tt 之前(这没有多大意义)?无论如何,我不认识 Dancer,但您可能想在模板中访问 session-&gt;uri()(设置以某种方式访问​​它),或者如果由于某种原因这不起作用,您可以传递 dev 的值作为一些请求时的参数,load('/files/[% dev %]?x=[% dev %]') 并使用param "x"。只是一些随机的想法。
  • @Qtax 我已经编辑了令人困惑的部分。我很欣赏这些提示,我最终在 DirectoryView 模块中定义了我需要的内容。谢谢!

标签: perl template-toolkit param dancer


【解决方案1】:

params 是一个传递哈希的函数,所以 params("dev") 不会得到任何东西。这样更好:

template 'actions.tt', {
   'dev' => param->{dev},
}

但在 Dancer 中,默认情况下会在模板中导出一些变量,如 params、request 和 session。因此,您可以将“模板”后面的 {} 留空并在模板中使用它:

$('#dir').load('/files/[% params.dev %]');

【讨论】:

    猜你喜欢
    • 2013-01-27
    • 1970-01-01
    • 2016-08-28
    • 2011-11-21
    • 2011-06-09
    • 1970-01-01
    • 2019-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多