9

次のコードを使用して ajax リクエストを生成しています。

echo CHtml::dropDownList('teamA', '', EnumController::getTeamOption(), array(
        'empty' => '(Team / Single)',
        'ajax' => array(
            'type'=>'POST',
            'url'=> $url,
            'update'=>"#resultA",
            //'data'=>"js:$('#teamA').hide().fadeIn()" 
        )
    )
);

私のメインレイアウトには、次のものがあります。

<?php Yii::app()->clientScript->scriptMap=array('jquery.js'=>false);?>
<?php Yii::app()->clientScript->scriptMap=array('jquery.min.js'=>false);?>

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.7/jquery-ui.min.js"></script>

Yii はアセットから jQuery のコピーをロードし、次に別のコピーを Google から直接ロードしています。私は Google コピーのみを使用し、Yii がアセットから独自のコピーをロードしないように強制したいと考えています。これどうやってするの?

4

3 に答える 3

17

Yii では、メイン レイアウトに JavaScript 情報をハードコードするべきではありません。

Yii は、クライアント スクリプト (javascript) が既に含まれているかどうかを判断できますが、コア スクリプト (jquery や jqueryui など) の場合は、構成ファイルでそれらのパッケージを変更する必要があります。

構成ファイルを開き、次のmain.phpように、必要なすべての js パッケージをCClientScriptコンポーネント内に追加します ( 内に追加する必要がありますcomponents)。

'clientScript'=>array(
  'packages'=>array(
    'jquery'=>array(
      'baseUrl'=>'//ajax.googleapis.com/ajax/libs/jquery/1.8/',
      'js'=>array('jquery.min.js'),
      'coreScriptPosition'=>CClientScript::POS_HEAD
    ),
    'jquery.ui'=>array(
      'baseUrl'=>'//ajax.googleapis.com/ajax/libs/jqueryui/1.8/',
      'js'=>array('jquery-ui.min.js'),
      'depends'=>array('jquery'),
      'coreScriptPosition'=>CClientScript::POS_BEGIN
    )
  ),
),

次に、jquery が必要になるたびに、コードの前にこれを追加します。

$cs = Yii::app()->getClientScript();
$cs->registerCoreScript('jquery');

Yii は jquery (またはその他のスクリプト) を 1 回だけインクルードします。コード内で jquery を数回呼び出したとしてもです。

于 2012-09-17T14:12:48.387 に答える
6

Yii Special Topics Performanceの指示に従って、簡単なテストを行ったところ、次のように動作しました。

メイン レイアウトの上部:

<?php
$cs=Yii::app()->clientScript;
$cs->scriptMap=array(
    'jquery.js'=>false,
    'jquery.ui.js' => false,
);?>

<head>メインレイアウトのセクション:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.7/jquery-ui.min.js"></script>

また

<?php echo CGoogleApi::init(); ?>

<?php echo CHtml::script(
    CGoogleApi::load('jquery','1.7.2') . "\n" .
    CGoogleApi::load('jqueryui','1.8.17') 
); ?>

私は実際には CGoogleApi ヘルパーを使用しますが、jsapi は私の例よりも新しいバージョンの jquery をロードできないようです! プレーンファイルでも機能しないため、Google側の更新が遅いと思います。

それとも、js ファイルがまだキャッシュに残っていたのでしょうか?

于 2012-09-16T21:39:46.313 に答える
2

これはうまくいきます

 <?php     
       $cs=Yii::app()->clientScript;
       $cs->scriptMap=array(
         'jquery.js'=>false,
         'jquery.ui.js' => false,
); ?>
于 2014-02-08T19:59:57.740 に答える