1

Yii Framework を使用して Web アプリケーションを開発しています。まず、javascript と css ファイルをハードコーディングすることから始めました (最善の方法ではないかもしれませんが、別のアプリケーションでこの方法を使用しています)。

私はこのようなことを達成しようとしています:

<html><head>
....
(css includes)
<script type="text/javascript" src="http://www.myapp.com/js/vendor/jquery-2.0.3.min.js"></script>
<script type="text/javascript">
    jQuery(function($) {
    if (typeof(myapp) == "undefined") { var myapp = {}; }

    var myapp = {
        ui : {},
        var: {}
    };
    myapp.var = {
        baseurl: '<?php Yii::app()->getBaseUrl()'
    };
});
</script>
<script type="text/javascript" src="http://www.myapp.com/js/myapp.dialog.js"></script>
<script type="text/javascript" src="http://www.myapp.com/js/myapp.customjqgrid.js"></script>

そこで、config/main.php に 2 つのパッケージを作成しました。 jquery (最初のスクリプト) を含むパッケージ「jquery」 共通ファイル (myapp.dialog.js および myapp.customjqgrid.js) を含むパッケージ「commonjs」

ただし、myapp.dialog.js と myapp.customjagrid.js はどちらも変数「myapp.var.baseurl」を使用します。したがって、インクルードの順序は次のようにする必要があります。

package jquery
inline jquery
package commonjs.

レイアウトの私のPHPは次のよ​​うなものです:

<?php 
Yii::app()->clientScript->registerPackage('jquery');
Yii::app()->clientScript->registerScript('helpers', "
    if (typeof(myapp) == 'undefined') { var myapp = {}; }
    var myapp = {
        ui : {},
        var: {}
    };
    myapp.var = {
        baseurl = '".Yii::app()->getBaseUrl()."/'
    };
", CClientScript::POS_READY);
Yii::app()->clientScript->registerPackage('commonjs');
?>

問題は、registerPackage に対する registerScript の位置を定義できないこと、または registerScript と registerPackage の間の依存関係を定義できないことです。パッケージ間の依存関係を定義できることはわかっていますが、PHP 変数を JS に渡すにはどうすればよいでしょうか?

これを行う簡単な方法はありますか、それとも JS と CSS を手動でインクルードし続ける方が良いですか?

ありがとうございました。

4

1 に答える 1

1

はい、パッケージはそのような用途には適していません。

そのまま作業します。パッケージを登録してから、ベースURLスクリプトを登録します

また

スクリプトを含めて JS 変数を 1 つのファイルに生成することのみを目的として、ウィジェットを作成します。そうすれば、「registerPackage」を「widget」メソッドに置き換えると、同じ結果が得られます。

于 2014-03-14T11:16:00.687 に答える