2010-07-29 3 views
1

저는 Catalyst 응용 프로그램에서 Assets 플러그인을 사용하고 있으며 모든 페이지의 자산에 일부 javascript 및 css 파일을 포함시키고 싶습니다.

내 첫 번째 생각은 설치 및 구성을 수행하는 MyApp/lib/MyApp.pm에서 $ c-> assets-> include ('file.js')를 호출하지만 보류를 얻는 방법을 모르겠다. 거기 $ c.

다음 아이디어는 WRAPPER 항목을 사용하고 기본 HTML 템플릿에 [% c.assets.include ('file.js') %]와 같은 호출을 포함하지만 호출은 객체 정보를 페이지에 덤프합니다. 출력을 억제하기 위해 호출을 엉망으로 만들어야합니다.

해결책이나 새로운 아이디어가 감사합니다. 미리 감사드립니다.

답변

4

$ c는 현재 요청을 나타내므로 응용 프로그램 설치 중에 아직 컨텍스트 개체가 없습니다.

체인을 사용하는 경우 루트 체인 작업에서 전화를 걸 수 있습니다. 로컬, 경로 등의 비 체인 액션 유형을 사용하는 경우 루트 컨트롤러에 시작 액션을 넣을 수 있습니다.

그러나 내 생각에 가장 올바른 방법은보기를 확장하는 것입니다. 여기에 몇 가지 예제 코드는 다음과 같습니다

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> 
+0

. 감사. – Felix

+0

'MooseX :: Types :: Moose'가 필요 없다고 생각합니다. 네이티브 애트리뷰트 헬퍼는 무스 코어의 일부입니다. – Ether

+0

@Ether : 당신 말이 맞아요, 하나는 문자열 형태를 사용할 수 있습니다. 나는 어디에서나 MooseX-Types를 사용하는 데 익숙합니다. – phaylon

관련 문제