1

Catalyst アプリで Assets プラグインを使用しています。すべてのページのアセットに JavaScript ファイルと CSS ファイルを含めたいと考えています。

私の最初の考えは、セットアップと構成を行う MyApp/lib/MyApp.pm から $c->assets->include('file.js') を呼び出すことですが、そこで $c を取得する方法がわかりません.

私の次のアイデアは、WRAPPER のものを使用し、[% c.assets.include('file.js') %] のような呼び出しをデフォルトの html テンプレートに配置することですが、呼び出しはオブジェクト情報をページにダンプするため、呼び出しは出力を抑制するために醜いこと。

ソリューションまたは新しいアイデアを歓迎します。前もって感謝します。

4

1 に答える 1

4

$c は現在のリクエストを表すため、アプリケーションのセットアップ中にコンテキスト オブジェクトはまだありません。

Chained を使用している場合は、ルート チェーン アクションで呼び出しを行うことができます。Local、Path などのチェーン化されていないアクション タイプを使用する場合は、ルート コントローラーに開始アクションを配置できます。

ただし、私の意見では、最も正しい方法はビューを拡張することです。コード例を次に示します。

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 に答える