में registerScript विधि से स्क्रिप्ट आदेश मजबूर मैं एक विजेट इस तरहYii
class MyWidget extends CWidget {
public function run(){
Yii::app()->clientScript->registerScript(__CLASS__, <<<JAVASCRIPT
var a = "Hello World!";
JAVASCRIPT
, CClientScript::POS_END);
}
}
नीचे और लेआउट में, मैं इस
<?php $this->widget('MyWidget');?>
<?php echo $content;?>
लेकिन एक में की तरह विजेट फोन अपने आप ही स्क्रिप्ट पंजीकृत करता है बनाया फ़ाइल देखें, मुझे उस विजेट द्वारा घोषित वैरिएबल की आवश्यकता है।
<?php
Yii::app()->clientScript->registerScript('script', <<<JAVASCRIPT
alert(a);
JAVASCRIPT
, CClientScript::POS_END);
?>
ध्यान दें कि दोनों registerScript विधि में मैं स्क्रिप्ट स्थिति के रूप में POS_END का उपयोग के बाद से मैं स्क्रिप्ट (CoreScript जैसे jQuery, jQueryUI आदि सहित) के सभी <body>
टैग के बाद डाल करने के लिए करना चाहते हैं।
समस्या यह है कि प्रस्तुत स्क्रिप्ट दृश्य फ़ाइल से एक को दिखाएगी और उसके बाद विजेट से एक।
alert(a);
var a = "Hello World!";
जैसा कि हम देख सकते हैं, उपर्युक्त कोड काम नहीं करेगा इसलिए मुझे दूसरी पंक्ति को ऊपर की रेखा से ऊपर रखना होगा।
आदेश को बल देने के तरीके पर कोई विचार? मैं CClientScript
(और एक नया registerScript
विधि बना रहा हूं) को विस्तारित करने के साथ ठीक हूं, जब तक कि सभी स्क्रिप्ट अंत स्थिति में प्रस्तुत की जाएंगी और मुझे उन इनलाइन जावास्क्रिप्ट कोड को नए पैकेज या फ़ाइल में खींचने की आवश्यकता नहीं है।
मेरे इरादे अंत पर लिपियों के सभी प्रतिपादन किया गया है। बात यह है कि विजेट में लिपि jQuery पर निर्भर करती है, और मैंने 'कोरस्क्रिप्टपॉशन' फ़ील्ड (http://www.yiiframework.com/doc/api/1.1/CClientScript#coreScriptPosition- सेटिंग सेट करके अंत में सभी कोरकॉन डाल दिया है। विवरण) POS_END के रूप में। –
खैर, यू के पास बुरा विचार है, या यू को विभिन्न घोषणाओं को विभाजित करना है, विगेट्स स्क्रिप्ट ओटी ईएनडी का शरीर, या यू को ईएनडी को पढ़ने के लिए बदलना है: वाईआई :: ऐप() -> क्लाइंटस्क्रिप्ट-> रजिस्टरस्क्रिप्ट ('स्क्रिप्ट' , <<< जावास्क्रिप अलर्ट (ए); जावास्क्रिप , सीसीलिएंटस्क्रिप्ट :: POS_READY); – Sergey