2012-01-19 22 views
9

Tôi đang sử dụng khung công tác YII cho ứng dụng web của mình. Tôi có một câu hỏi về việc đăng ký tập tin kịch bản Java bên ngoài.Yii - Các tệp JS bên ngoài Inlclude, registerScriptFile và xuất bản

Có thể ai đó giúp tôi không?

  1. vị trí tốt nhất để sao chép tập tin kịch bản Java (mà thư mục)
  2. Tôi thấy có hai cách để đăng ký là gì đó bên ngoài Java script tập tin

    tiếp cận đầu tiên

    $baseUrl = Yii::app()->baseUrl; 
    $cs = Yii::app()->getClientScript(); 
    $cs->registerScriptFile($baseUrl.'/js/yourscript.js'); 
    

    Phê duyệt thứ hai

    $cs=Yii::app()->getClientScript(); 
    $cs->registerScriptFile(Yii::app()->getAssetManager()->publish('path/to/js')); 
    $cs->registerScript('id', 'your js here'); 
    

Trong cách tiếp cận đầu tiên tôi trực tiếp đăng ký với registerScriptFile và đi qua các tập tin java script

Trong cách tiếp cận thứ hai tôi đang đăng ký và công bố kịch bản. Điều đó có nghĩa là nó sao chép vào các thư mục tài sản. (Vui lòng sửa tôi Nếu tôi sai) và sau đó bước cuối cùng là gì, id và một lần nữa là java script file là gì. ($cs->registerScript('id', 'your js here');)

Trong trường hợp của tôi, tôi truy cập từ một trong các khung nhìn, vì vậy trong phương pháp thứ hai kể từ khi nó được xuất bản vào thư mục tài sản, nếu 10 khách hàng gọi tệp đó được xuất bản 10 lần (vì tôi đang truy cập từ tệp xem)

Tôi hơi bối rối.

Cảm ơn câu trả lời của

Trân

Kiran

+0

bản sao có thể có của [Bao gồm CSS, tệp javascript trong Yii Framework] (http://stackoverflow.com/questions/1998449/in clude-css-javascript-file-in-yii-framework) – bummi

Trả lời

15

Yii Tài sản thư mục thường được sử dụng bởi Widgets và các thành phần bên trong của Yii như Gridview. Bạn không cần lưu trữ hoặc xuất bản các tệp JS hoặc CSS bên ngoài của mình vào thư mục nội dung.

Thứ hai nếu các tệp đã tồn tại trong thư mục nội dung getAssetManager()->publish('path/to/js') sẽ không sao chép nó.

và cuối cùng bạn không cần phải nhanh chóng lớp CClientScript, bạn có thể gọi nó là trực tiếp như

Yii::app()->clientScript->registerScriptFile(
    Yii::app()->baseUrl.'/js/file.js' 
); 

hoặc nếu bạn đang sử dụng chủ đề

Yii::app()->clientScript->registerScriptFile(
    Yii::app()->theme->baseUrl.'/js/file.js' 
); 
+0

Cảm ơn bạn Uday cho điều này – Bujji

+0

Ông không phải là -instantiating- lớp CClientScript. – marcovtwout

2

Trong trường hợp thông thường cách tốt nhất là đưa các file JS của bạn vào web_root/js và sử dụng $cs->registerScriptFile. AssetManager thuận tiện để sử dụng trong các widget. Bạn có thể đặt các tệp JS của mình vào thư mục được bảo vệ và xuất bản chúng vào thư mục nội dung khi cần. Nếu bạn gọi phương thức publish() 10 lần, nó sẽ chỉ xuất bản tệp của bạn. Nếu bạn đặt tham số $forceCopy thành true (mặc định là false), thì nó sẽ sao chép 10 lần, nhưng trong cùng một thư mục.

+0

Cảm ơn bạn Oleg cho phản hồi nhanh chóng của bạn – Bujji

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