2014-12-26 4 views
15

나는 /views/A/ 폴더에 A.php보기 파일이 있습니다. 그리고 A.js js 파일이 /views/A/ 폴더에 있습니다. js 파일을보기 파일에 등록하는 것을 도와주세요.yii2 JS 파일을보기에 등록

필자는보기 파일에 $this->registerJsFile('path/to/file.js');을 써야 함을 이해합니다.

하지만 (질문 A) PHPStorm의 method registerJsFile is not found in a class 메시지가 표시됩니다.

(질문 B) 두 파일 모두 같은 폴더에 있다고 간주하여 경로에 무엇을 써야합니까? /views/A/?

답변

5

특정 파일을 포함시킬 이유가 아닌 수동 자산 번들을 만드는이 사용? 어떤 경우

당신이 documentation regarding assets을 읽은 경우

, 당신은 명확한 구분에 대한 소스, 출판외부 자산이 있다는 걸 눈치 챘을 것이다.

소스출판 자산 파일을 게시할지 여부와 방법을 결정하기 위해 다른 옵션을 사용하는 것이 존재의 가장 중요한 부분.

소스 자산이 assets 디렉토리로 복사되어야하는 경우가 있습니다.

registerJsFile의 호출은 hinted in the documentation으로 으로 게시됩니다. web/js/ 같이

  1. 이동합니다 web/ 폴더에있는 자산 또는 사용자가 선호하고 registerJsFile()
  2. 추가를 계속 사용 : 여기

    당신은 아마 처음보다 신속하고 일관성있게 구체적으로 두 가지 옵션을 가지고 소스에 대한 새 자산 번들. 위의 링크 된 페이지에 설명 된대로 다양한 옵션을 지정합니다.

희망 사항이 문제를 해결합니다.

+0

파일을 등록하면 특정보기에서만 파일을 사용할 수 있습니다. 다른보기에서 원합니다. 다른 js 파일을 사용하십시오.이것이 자산으로 가능합니까? 자산 관리자가 A보기에서만이 파일을 사용하고 B보기에서 해당 파일을 사용하는 경우 – David

+0

과 같은 특정 자산을 작성해야 특정보기에 등록해야한다고 이해할 수 없습니다. 자산 번들 클래스의'init()'메소드를 구현함으로써 특정 조건 (문서가 지정하는대로)에 기반한 새로운 파일을 포함하는 것이 가능할 수도 있지만 실제로는 csase-by-case basis에 달려있다. –

1

A : 문서의 내용 : http://www.yiiframework.com/doc-2.0/yii-web-view.html 코드가 정확한 것처럼 보입니다.

보기 파일 자체에서 js를 등록 하시겠습니까? 컨트롤러가 아닌가요? registerJsFile() 메서드는 뷰 클래스에서 가져온 것입니다.

IDE가 메소드를 찾지 못했을 가능성이 높기 때문에 아파치 환경에서 해봤습니까?

B하십시오 별명

+0

A는 : 문제는 내가 $ this-> 제목 앞에 $ this-> registerJsFile와 $ this- 사용하던 것을> 지금을 을 PARAMS 작품과 파일이 포함되어 있지만 경로에 문제가 있다고 생각합니다. '@ app/views/A/A.js'를 사용했지만 제대로 작동하지 않습니다. ( – David

11

이 우아한 아니지만, 당신이

<?php $this->registerJsFile(Yii::$app->request->baseUrl.'/js/youFile.js',['depends' => [\yii\web\JqueryAsset::className()]]); ?> 
1

주어진 possion에 JS 파일을 등록합니다 (Yii2의 문서에서 볼 수 있듯이) 귀하의 js 파일 jQuery를 한 후 등록해야하는 경우 작업

$this->registerJsFile('path/to/file.js', ['position' => \yii\web\View::POS_END]); 

첫 번째 인수는 페이지에 삽입하려는 실제 JS 코드입니다. 두 번째 인수는 스크립트가 페이지에 삽입되어야하는 위치를 결정합니다. 가능한 값은 다음과 같습니다.

헤드 섹션의 View :: POS_HEAD.

개봉 후 바로보기 :: POS_BEGIN

닫기 전에 바로보기 :: POS_END.

View :: POS_READY는 문서 준비 이벤트에서 코드를 실행합니다.

이것은 jQuery를 자동으로 등록합니다. 보기 :: 문서로드 이벤트에서 코드를 실행하기위한 POS_LOAD. 그러면 jQuery가 자동으로 등록됩니다. 마지막 인수는 코드 블록을 식별하고 기존 코드 ID를 새 ID 태그 대신 바꾸는 데 사용되는 고유 한 스크립트 ID입니다. 제공하지 않으면 JS 코드 자체가 ID로 사용됩니다.

외부 스크립트

는 다음과 같이 추가 할 수 있습니다

$this->registerJsFile('http://example.com/js/main.js', ['depends' => [\yii\web\JqueryAsset::className()]]); 

registerJsFile의 인수가() registerCssFile과 비슷합니다(). 위의 예제에서 main.js 파일을 JqueryAsset에 대한 종속성으로 등록합니다. 이것은 main.js 파일이 jquery.js 후에 추가된다는 것을 의미합니다. 이 종속성 사양이 없으면 main.js와 jquery.js의 상대적인 순서는 정의되지 않습니다.

3

당신하여 JS 파일을 등록 할 경우 :이 작동

$this->registerJsFile("@web/js/all.js"); 

을하지만 jQuery를 사용할 수 없습니다. 이 파일 all.js이 jQuery보다 먼저로드되기 때문입니다. jQuery 이후에로드하려면 'yii\web\YiiAsset' 또는 \yii\web\JqueryAsset에 의존하게 만듭니다. 따라서 jQuery.js 이후에로드됩니다. 예 :

$this->registerJsFile("@web/js/all.js",[ 
    'depends' => [ 
     \yii\web\JqueryAsset::className() 
    ] 
]); 

그래서 \yii\web\JqueryAsset\yii\web\YiiAsset 사이의 차이점은 무엇입니까?

에서 js 파일은 jQuery.js 이후에로드되고 YiiAsset에서 yii.js 파일 뒤에 js 파일이로드됩니다. 당신이 당신의 자신의 사용자 정의 자산 번들을 만들려면

:

<?php 
namespace frontend\components; 
use yii; 

use yii\web\AssetBundle; 
class CustomAssets extends AssetBundle 
{ 
    public $css = [ 
     "path/to/css/file.css" 
    ]; 
    public $js = [ 
     "path/to/js/file.js" 
    ]; 
    public $depends = [ 
    ]; 
}