1

我在我的 Catalyst 应用程序中使用 Assets 插件,我希望在每个页面的资产中包含一些 javascript 和 css 文件。

我的第一个想法是从 MyApp/lib/MyApp.pm 调用 $c->assets->include('file.js') 我在那里进行设置和配置,但我不知道如何在那里获得 $c .

我的下一个想法涉及使用 WRAPPER 的东西,并在默认 html 模板中放置 [% c.assets.include('file.js') %] 之类的调用,但调用会将对象信息转储到页面,因此调用会有被丑化以抑制输出。

解决方案或新想法表示赞赏。提前致谢。

4

1 回答 1

4

在应用程序设置期间还没有上下文对象,因为 $c 代表当前请求。

如果您使用的是 Chained,则可以在根链操作中进行调用。如果您使用本地、路径等非链式操作类型,您可以在根控制器中放置一个开始操作。

然而,我认为最正确的方法是扩展视图。这是一些示例代码:

package MyApp::View::HTML;
use Moose;
use MooseX::Types::Moose qw( ArrayRef Str );
use namespace::autoclean;    

extends 'Catalyst::View::TT';

has common_assets => (
    traits  => [qw( Array )],
    isa     => ArrayRef[Str],
    handles => {
        common_assets => 'elements',
    },
);

before process => sub {
    my ($self, $ctx) = @_;

    $ctx->assets->include($_)
        for $self->common_assets;
};

1;

然后您可以使用以下内容对其进行配置:

<view HTML>
    common_assets foo.css
    common_assets bar.js
</view>
于 2010-07-29T20:13:52.117 回答