2014-12-26 16 views
15

Tôi có tệp xem A.php trong thư mục /views/A/. Và tôi có tệp A.js js trong /views/A/ thư mục Vui lòng giúp tôi đăng ký tệp js trong tệp xem.yii2 đăng ký các tệp JS lên Chế độ xem

Vì tôi hiểu tôi phải viết $this->registerJsFile('path/to/file.js'); trong tệp xem.

Nhưng (Câu hỏi A) tôi nhận được thông báo method registerJsFile is not found in a class từ PHPStorm.

Ngoài ra (Câu hỏi B) Tôi nên viết gì trong đường dẫn xem xét cả hai tệp nằm trong cùng một thư mục /views/A/?

Trả lời

5

có lý do cụ thể nào để đưa tệp theo cách thủ công thay vì tạo gói nội dung không?

Trong mọi trường hợp nếu bạn đã đọc documentation regarding assets, bạn sẽ nhận thấy rằng có một sự phân biệt rõ ràng về nguồn, bốbên ngoài tài sản.

Phần quan trọng nhất trong số đó là nguồnxuất bản nội dung sử dụng các tùy chọn khác nhau để xác định xem tệp có được xuất bản hay không.

Trong trường hợp của bạn, bạn có tài sản nguồn cần được sao chép sang thư mục nội dung.

Gọi số registerJsFilehinted in the documentation, sẽ mong đợi một tài sản xuất bản.

Ở đây bạn có đặc biệt hai lựa chọn, mà có lẽ là người đầu tiên là nhanh chóng hơn và chặt chẽ:

  1. di chuyển tài sản trong thư mục web/, như trong web/js/ hoặc bất cứ điều gì bạn thích và tiếp tục sử dụng registerJsFile()
  2. add gói nội dung mới cho các tài sản nguồn, chỉ định các tùy chọn khác nhau được nêu chi tiết trong trang được liên kết ở trên.

Hy vọng điều này sẽ xóa mọi thứ.

+0

Tôi đang đăng ký các tệp đó vì tôi muốn tệp chỉ được sử dụng ở chế độ xem cụ thể và trong các chế độ xem khác mà tôi muốn sử dụng các tệp js khác.Điều này có khả thi với tài sản không? Tôi không hiểu liệu có khả năng nói cho người quản lý tài sản sử dụng tệp này chỉ trong chế độ xem A và tệp đó chỉ trong chế độ xem B chẳng hạn – David

+0

bạn sẽ cần tạo nội dung cụ thể để được đăng ký trong chế độ xem cụ thể đó. Mặc dù có thể bao gồm một tệp mới dựa trên các điều kiện cụ thể (như tài liệu chỉ định) bằng cách triển khai phương thức 'init()' của lớp gói nội dung, nó thực sự phụ thuộc vào cơ sở từng trường hợp. –

1

A: Từ tài liệu: http://www.yiiframework.com/doc-2.0/yii-web-view.html Mã của bạn có vẻ chính xác.

Bạn có đăng ký js từ chính tệp xem không? không phải là bộ điều khiển? Phương thức registerJsFile() là từ lớp khung nhìn.

Rất có thể là IDE của bạn không tìm ra phương pháp, bạn đã thử nó trong môi trường apache chưa?

B: Sử dụng bí danh

+0

A: Vấn đề đã được rằng tôi đã sử dụng $ this-> registerJsFile trước $ this-> tiêu đề và $ this-> params Bây giờ nó công việc và tập tin được bao gồm nhưng tôi nghĩ rằng tôi có vấn đề với đường dẫn. Tôi đã sử dụng '@ app/views/A/A.js' nhưng nó không hoạt động: ( – David

11

Đây không phải là tao nhã, nhưng làm việc nếu bạn cần phải có tập tin js của bạn đăng ký sau jquery (như đã thấy trong doc Yii2)

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

đăng ký tập tin js của bạn trên possion cho

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

Đối số đầu tiên là mã JS thực tế mà chúng tôi muốn chèn vào trang. Đối số thứ hai xác định vị trí tập lệnh sẽ được chèn vào trang. Giá trị có thể là:

Chế độ xem :: POS_HEAD cho phần đầu.

Chế độ xem :: POS_BEGIN ngay sau khi mở.

Chế độ xem :: POS_END cho đúng trước khi đóng.

Chế độ xem :: POS_READY để thực thi mã trên sự kiện sẵn sàng tài liệu.

Điều này sẽ tự động đăng ký jQuery. Chế độ xem :: POS_LOAD để thực thi mã trên sự kiện tải tài liệu. Điều này sẽ tự động đăng ký jQuery. Đối số cuối cùng là ID tập lệnh duy nhất được sử dụng để xác định khối mã và thay thế mã hiện có bằng cùng một ID thay vì thêm ID mới. Nếu bạn không cung cấp, mã JS sẽ được sử dụng làm ID.

Một kịch bản bên ngoài có thể được bổ sung như sau:

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

Những lập luận cho registerJsFile() cũng tương tự như đối với registerCssFile(). Trong ví dụ trên, chúng tôi đăng ký tệp main.js với sự phụ thuộc vào JqueryAsset. Điều này có nghĩa là tệp main.js sẽ được thêm vào SAU jquery.js. Không có đặc tả phụ thuộc này, thứ tự tương đối giữa main.js và jquery.js sẽ không được xác định.

3

Nếu bạn đăng ký một file js bởi:

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

này sẽ làm việc nhưng bạn sẽ không thể sử dụng jQuery. Vì tệp này all.js được tải trước jQuery. Để tải sau jQuery, chúng tôi làm cho nó phụ thuộc vào số 'yii\web\YiiAsset' hoặc trên \yii\web\JqueryAsset. Vì vậy, nó sẽ được tải sau jQuery.js. Ví dụ:

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

Vì vậy, sự khác biệt giữa \yii\web\JqueryAsset\yii\web\YiiAsset là gì?

Trong jQueryAsset tệp js sẽ tải sau jQuery.js và trong YiiAsset tệp js sẽ tải sau yii.js tệp.

Nếu bạn muốn tạo riêng của bạn Asset Bundle:

<?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 = [ 
    ]; 
} 
Các vấn đề liên quan