2012-06-20 26 views
6

Tôi đang tạo một tiện ích cho ứng dụng Yii. Chế độ xem bố cục chính đăng ký tất cả các tệp tập lệnh phổ biến như jQuery và jQueryUI. Trong widget của tôi, tôi muốn sử dụng một plugin jQueryUI dựa trên jQueryUI đã được nạp.Thay đổi thứ tự các tệp tập lệnh đã đăng ký trong yii

Tôi biết tôi có thể chỉ định vị trí trên trang mà tập lệnh được bao gồm, nhưng có vẻ như một chút nhấn và bỏ lỡ để bao gồm nó ở cuối "" - nếu tôi có tập lệnh khác mà tôi cần tải sau plugin đó ? Làm cách nào để đảm bảo chúng được tải đúng thứ tự - bất kỳ ai có ý tưởng nào?

+0

Bạn có thể chỉ định vị trí. Xem tài liệu cho [registerScript] (http://www.yiiframework.com/doc/api/1.1/CClientScript/#registerScript-detail) và/hoặc [registerScriptFile] (http://www.yiiframework.com/doc/ api/1.1/CClientScript/# registerScriptFile-detail) – adamors

+0

Cảm ơn những suy nghĩ nhưng tôi đã nhận thức được điều này. Bạn có thể chỉ định một trong ba địa điểm - POS_BEGIN, POS_END và POS_READY - điều đó không giúp ích gì nếu tôi cần tất cả các plugin của mình được nạp trong POS_BEGIN, nhưng một số plugin đến từ bố cục chính và một số từ tiện ích con. – Hippyjim

+0

Tôi hiểu, bạn đã thử duyệt nguồn của các tiện ích zii chưa? – adamors

Trả lời

11

Bạn có thể sử dụng tính năng phụ thuộc trong Yii script packages. Tôi đã có similar problem before.

Ví dụ, bạn có các gói kịch bản cấu hình như dưới đây,

'clientScript' => array(
    'packages' => array(
    'package1' => array(
      'basePath' => 'path.to.package1', 
      'js' => array(
       'package1.js', 
     ), 
      'css' => array(
       'package1.css' 
     ), 
    ), 
    'package2' => array(
      'basePath' => 'path.to.package2', 
      'js' => array(
       'package2.js', 
     ), 
      'css' => array(
       'package2.css' 
     ), 
      'depends' => array(
       'package1', 
     ) 
    ), 
    'package3' => array(
      'basePath' => 'path.to.package3', 
      'js' => array(
       'package3.js', 
     ), 
      'css' => array(
       'package3.css' 
     ), 
      'depends' => array(
       'package2', 
     ) 
    ), 
    ) 
) 

Trong ví dụ trên, package2 yêu cầu (phụ thuộc) package1package3 đòi hỏi package2. Giả sử trong trường hợp của bạn, tiện ích con sử dụng package2 và tập lệnh khác sử dụng package3. Ngay cả khi bạn không hiển thị tiện ích, nếu bạn sử dụng Yii::app()->clientScript->registerPackage('package3');, nó sẽ tự động cài đặt package2, sau đó cài đặt package1 trước package2 (hoặc sẽ không cài đặt nếu trước đó một số tập lệnh trước đây đã yêu cầu package1.).

+0

+1, có vẻ tốt, tại sao tôi không nghĩ về điều này! –

+0

Những thứ tuyệt vời, cảm ơn Petra, đó chính xác là những gì tôi cần. – Hippyjim

Các vấn đề liên quan