2015-01-25 5 views
10

हाय मैं प्रक्रिया की तरह प्रक्रिया डॉक्स में वर्णित निम्नलिखित एसेट बंडल दर्ज की AppAsset.php में एक Yii2: पंजीयन एसेट बंडल बाहरी जे एस फ़ाइल को पंजीकृत बनाम

public $js = [ 
     'js/myjsfile.js' 
    ]; 

तो का लाभ जानना चाहता था दृश्य फ़ाइल में

namespace app\assets; 

तरह नामस्थान जोड़ने और फिर

की तरह उपयोग बयान जोड़ने
use app\assets\AppAsset; 
AppAsset::register($this); 
इसके बजाय यह सब करने का

अगर मैं का उपयोग प्रक्रिया दो

$this->registerJs('js/myjsfile.js', $this::POS_READY); 

यह ठीक काम करता है। तो मुझे प्रक्रिया एक का उपयोग क्यों करना चाहिए।

  1. इसके लिए कोई भी लाभ और कारण बहुत सराहना की जाएगी।
  2. यदि मैं प्रक्रिया का पालन करता हूं तो क्या मुझे AppAsset.php में सभी जेएस फ़ाइलों को व्यक्तिगत रूप से जोड़ने की आवश्यकता है।

धन्यवाद।

उत्तर

8

एसेट बंडल का उपयोग करने के मुख्य कारणों में से एक यह है कि आपकी संपत्ति के पथ हमेशा सही होंगे। पर विचार करें:

$this->registerJsFile('js/myjsfile.js', ['position'=>$this::POS_READY]); 

की तरह कुछ उत्पन्न करेगा:

<script src="js/myjsfile.js"></script> 

कौन सा गैर urlManager सक्षम यूआरएल, उदा के लिए महान काम करता है http://localhost/yiiproject/index.php?r=user/update&id=8 आपके ब्राउज़र में js फ़ाइल के लिए लग रहा है क्योंकि: /yiiproject/js/myjsfile.js

लेकिन अगर आप urlManager सक्षम, अपने यूआरएल http://localhost/yiiproject/user/update/8, जो आपके ब्राउज़र पर अपने js फ़ाइल के लिए दिखेगा इसका मतलब तरह दिखेगा: /yiiproject/user/update/8/js/myjsfile.js

आप का उपयोग करके इस समस्या को दूर कर सकते हैं:

$this->registerJsFile(Yii::$app->request->baseUrl.'/js/myjsfile.js', ['position'=>$this::POS_READY]); 

लेकिन एसेट बंडल मूल रूप से आप के लिए है कि नहीं करता है।

+0

हाय डेक्स - यह जवाब एसेटबंडल का उपयोग क्यों करता है। क्या आप मुझे यह भी बता सकते हैं कि मुझे AppAsset.php में व्यक्तिगत रूप से सभी जेएस फ़ाइलों को शामिल करने की आवश्यकता है या नहीं। – Pawan

+0

मेरे पास एक ही सवाल है। यदि मेरे पास कई विचार हैं, और प्रत्येक दृश्य का अपना सीएसएस/जेएस है, तो क्या इसका मतलब है कि मुझे उनमें से प्रत्येक के लिए संपत्ति बंडल बनाना होगा? –

+0

@ जेरी हाँ मैं अलग सीएसएस और जेएस फाइलों के प्रत्येक बंडल के लिए एक एसेटबंडल बनाउंगा। ज्यादातर मामलों में हालांकि, 1 से अधिक दृश्य एक ही संपत्ति का उपयोग करेंगे ताकि आप एसेटबंडल का पुन: उपयोग कर सकें। – deacs

10

संपत्ति बंडलों के सामान्य पंजीकरण पर कुछ फायदे हैं। इसके अलावा क्या @deacs उसकी/उसके जवाब में कहा से यहां अन्य हैं:

  1. आस्तियों बंडल संपत्ति के लिए फ़ाइल प्रकाशित कर सकते हैं अगर इसके नहीं वेब सुलभ निर्देशिका में
  2. आस्तियों बंडल कम फ़ाइलें (के मामले में के साथ सौदा कर सकते हैं सीएसएस) के साथ ही संपत्ति को संपीड़ित करना।
  3. बनाता कोड सुरुचिपूर्ण विशेष रूप से निर्भरता और इसलिए पुनर्प्रयोग

सभी सुविधाओं है कि बंडलों को बेहतर बनाता है docs

+0

महान समापन। +1 – deacs

+0

पूरक के लिए धन्यवाद :) –

0

एसेट बंडल का उपयोग में पाए जाते हैं को हल करने में, आप भी 'विक्रेता' फ़ोल्डर से नवीनतम संस्करण प्राप्त कर सकते हैं , इसलिए यदि आपको कुछ lib को अपडेट करने की आवश्यकता है तो आपको मैन्युअल रूप से ऐसा करने की आवश्यकता नहीं है क्योंकि संगीतकार पहले से ही ऐसा करता है।

संबंधित मुद्दे