1

http://www.yiiframework.com/forum/index.php/topic/37313-confused-about-jquery-and-script-inclusion-handling/からのクロスポストですが、ここでより迅速に回答する人もいます...

Yii の jquery やその他の JavaScript ファイルのインクルードの処理について、私は完全に混乱しています。

これは機能していました:

<script type="text/javascript">
    jQuery(document).ready(function() {
        jQuery('#Event_recuring_nature, #Event_venue, #Event_expected_attendance, #Event_age_group, #Event_state, #Event_gender, #Event_ethnicity, #Event_exclusivity, #Package_cash_product_sponsorships, #Event_vanue_signature, #Event_logo_on_step_and_repeat, #Event_inclusion_in_press, #Event_ad_space, #Event_inclusion_in_event_materials, #Package_category_exclusivity, #logo_on_signature, #Event_proposed_events_included, #Event_dependant_on_sponsorship, #Event_sponsorship_type, #Event_attendee_professions, #Event_attendee_income').yaselect();
    });
</script>
<script type="text/javascript" src="/js/libs/jquery-ui-datetimepicker.js"></script>
<script type="text/javascript" src="/js/event_create.js"></script>
<script type="text/javascript" src="/js/slider.js"></script>
<script type="text/javascript" src="/js/other_social.js"></script>
<script type="text/javascript" src="/js/package.js"></script>

これは(おそらくどちらが良いでしょうか?)そうではありません:

<?php 
Yii::app()->clientScript->registerScript('create-script', "
    $(function()  {
          $('body').css('overflow-x','hidden');
        $('#Event_recuring_nature, #Event_venue, #Event_expected_attendance, #Event_age_group, #Event_state, #Event_gender, #Event_ethnicity, #Event_exclusivity, #Package_cash_product_sponsorships, #Event_vanue_signature, #Event_logo_on_step_and_repeat, #Event_inclusion_in_press, #Event_ad_space, #Event_inclusion_in_event_materials, #Package_category_exclusivity, #logo_on_signature, #Event_proposed_events_included, #Event_dependant_on_sponsorship, #Event_sponsorship_type, #Event_attendee_professions, #Event_attendee_income').yaselect();
    });

");
?>
<?php Yii::app()->clientScript->registerScriptFile($this->assetsBase.'/js/libs/jquery-ui-datetimepicker.js'); ?>
<?php Yii::app()->clientScript->registerScriptFile($this->assetsBase.'/js/event_create.js'); ?>
<?php Yii::app()->clientScript->registerScriptFile($this->assetsBase.'/js/slider.js'); ?>
<?php Yii::app()->clientScript->registerScriptFile($this->assetsBase.'/js/other_social.js'); ?>
<?php Yii::app()->clientScript->registerScriptFile($this->assetsBase.'/js/package.js'); ?>

<app_dir>/js/すべての JavaScript 用 のディレクトリ が<app_dir>/protected/assets/jsあり、yii フォーラムの registerScriptFile の投稿で提案されているように作成しました (スクリプト インクルードを適切に処理すると思われます)。もちろん、ファイルが重複してしまい、クリーンアップしています。

レイアウトのヘッダーには次のものが含まれます。

    <?php Yii::app()->clientScript->registerCoreScript('jquery')?>
    <?php Yii::app()->clientScript->registerScriptFile($this->assetsBase.'/js/libs/jquery-ui-1.8.20.custom.min.js')?>
    <?php Yii::app()->clientScript->registerScriptFile($this->assetsBase.'/js/libs/jquery.yaselect.min.js')?>
    <?php Yii::app()->clientScript->registerScriptFile($this->assetsBase.'/js/script.js')?>

そして、私はこれをconfig/main.phpに持っています:

// application components
   'components'=>array(
      'clientScript'=>array(
            'packages'=>array(
                 'jquery'=>array(
                     'baseUrl'=>Yii::app()->request->baseUrl . '/js/libs/',
                     'js'=>array('jquery-1.7.2.min.js')
                  )                                       
             )
      ),

(baseUrl が /js を指していることはわかっていますが、

'baseUrl'=>Yii::app()->basePath . '/assets/js/libs' 

また、jqueryをまったくロードしませんでした!!!

助けてください!私は Yii を初めて使用し、これについて頭を悩ませています。ありがとうございました。

編集:これはコードが生成するものです:

<script type="text/javascript" src="/js/libs/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="/assets/ab20866e/jquery.yiiactiveform.js"></script>
<script type="text/javascript" src="/assets/2dfe5520/js/libs/jquery-ui-datetimepicker.js"></script>
<script type="text/javascript" src="/assets/2dfe5520/js/event_create.js"></script>
<script type="text/javascript" src="/assets/2dfe5520/js/slider.js"></script>
<script type="text/javascript" src="/assets/2dfe5520/js/other_social.js"></script>
<script type="text/javascript" src="/assets/2dfe5520/js/package.js"></script>
<script type="text/javascript" src="/assets/2dfe5520/js/libs/jquery-ui-1.8.20.custom.min.js"></script>
<script type="text/javascript" src="/assets/2dfe5520/js/libs/jquery.yaselect.min.js"></script>
<script type="text/javascript" src="/assets/2dfe5520/js/script.js"></script>

私には、2 行目の /assets/ab20866e/jquery.yiiactiveform.js が異なるアセット ID を持っているように見えます...

4

2 に答える 2

3

目の前にあなたのレイアウト ファイルはありませんが、あなたのレイアウトは$contentスクリプト ファイルの登録前にあるように見えます。

このため、ビュー内のスクリプトが読み込まれ、次にテンプレート内のスクリプトが読み込まれます。これが発生すると、datetimepicker が読み込まれますが、jquery-ui がまだ読み込まれていないため、エラーが報告されます。の前にテンプレートにスクリプトがロードされていることを確認してください$content

または、位置引数を指定して、ビューに読み込まれるスクリプトを head ではなく body に強制することもできます。たとえば、次のようになります。

<?php Yii::app()->clientScript->registerScriptFile(Yii::app()->request->baseUrl . '/js/libs/jquery-ui-datetimepicker.js', CClientScript::POS_BEGIN); ?>
于 2012-11-07T16:53:23.460 に答える
0

考慮すべきもう 1 つのことは、次のように Yii に最初から jQuery をロードさせることです。

cs()->registerCoreScript('jquery');

次のように jQuery UI をロードすることもできます。

cs()->registerCoreScript('jquery.ui');

これにより、他のjQueryライブラリとファイルをロードするときの多くのregisterScriptFile POS_BEGIN/POS_HEADの問題が解決されることがわかりました(ernieの回答のように)

于 2012-11-07T20:32:54.910 に答える