我有一个视图,我需要在我的标题中调用JQuery以及另一个JS库。对于所有其他页面,可以在文档末尾呈现它们。在Yii2中实现这一目标的最佳方法是什么?
目前我只是在我的AppAsset.php中执行此操作
public $js = [
'https://code.highcharts.com/highcharts.js',
];
public $jsOptions = ['position' => \yii\web\View::POS_HEAD];
我已经考虑制作一个new Asset,但它似乎没有用,我不确定这是不是正确的方法。因为我不想在每个页面中首先渲染JS。
<?php
namespace app\assets;
use yii\web\AssetBundle;
class EarlyJavaScriptAsset extends AssetBundle
{
public $js = [
'https://code.highcharts.com/highcharts.js',
];
public $jsOptions = ['position' => \yii\web\View::POS_HEAD];
public $publishOptions = [
'only' => [
'report/report-1', // this is view folder location
]
];
}
答案 0 :(得分:1)
如果您查看AssetBundle::register(),您会看到它使用View::registerAssetBundle()而没有第二个参数。但是第二个参数是你需要的东西:
@param integer | null $ position如果设置,则强制javascript文件的最小位置。 这将调整依赖资源的javascript文件位置或失败if 要求无法满足。如果为null,则资产捆绑位置 设置不会更改。有关详细信息,请参阅registerJsFile javascript位置。
在您的视图中,您注册资产包的位置,请更改
EarlyJavaScriptAsset::register($this);
到
$this->registerAssetBundle(EarlyJavaScriptAsset::className(), $this::POS_HEAD);
和
$this->registerAssetBundle(EarlyJavaScriptAsset::className(), $this::POS_END);
在第二个视图中
PS:当然$this
是您View
的上下文。