[英]Yii2 custom widget assets not registering
我正在嘗試開發一個自定義小部件,但我遇到了牆。 我有一些需要包含的第三方 JS/CSS 文件,但無論出於何種原因,Yii2 都不會注冊它們。 我已經遵循了 Yii2 文檔中的所有內容,但似乎一無所獲。 我的目錄結構如下:
成分
- DildenFeedback.php
- DildenFeedbackAsset.php
- 意見/
-- 反饋.php
- 資產/
--feedback.min.js
--feedback.min.css
DildenFeedback.php(小部件類)
<?php
namespace app\components\yii2feedbackwidget;
use Yii;
use yii\base\Widget;
use app\components\yii2feedbackwidget\DildenFeedbackAsset;
class DildenFeedback extends Widget
{
public function run() {
parent::run();
DildenFeedbackAsset::register($this->view);
return $this->render('feedback');
}
}
DildenFeedbackAsset.php(小部件資產類)
<?php
namespace app\components\yii2feedbackwidget;
use yii\web\AssetBundle;
class DildenFeedbackAsset extends AssetBundle {
public $sourcePath = 'assets/';
public $css = ['assets/feedback.min.css'];
public $js = ['assets/feedback.min.js'];
public $depends = ['yii\web\JqueryAsset'];
}
反饋視圖
?>
<script type="text/javascript">
$.feedback();
</script>
views/layouts/main.php (我試圖調用的主模板)
<?php $this->endBody() ?>
<?php
echo DildenFeedback::widget();
?>
所以當我去檢查頁面時,沒有找到feedback.min.js/css。 視圖文件已正確呈現,但我的猜測是我的 AssetBundle 格式不正確。 任何幫助將非常感激。
編輯(來自 Yii 調試器資產):
sourcePath /var/www/public/components/yii2feedbackwidget/assets
basePath /var/www/public/web/assets/7e80049a
baseUrl /assets/7e80049a
css 資產/feedback.min.css
js 資產/feedback.min.js
取決於 yii\\web\\JqueryAsset
編輯 2我已經在全新安裝的 Yii2 上測試了這個,我得到了同樣的錯誤。
好吧,您應該簡單地更正您的sourcePath
:
class DildenFeedbackAsset extends AssetBundle {
public $sourcePath = '@app/components/assets/';
public $css = ['feedback.min.css'];
public $js = ['feedback.min.js'];
public $depends = ['yii\web\JqueryAsset'];
}
您還應該使用registerJs()
而不是腳本標簽來修復您的視圖:
$this->registerJs('jQuery.feedback();');
我已經解決了,感覺有點傻。 它歸結為小部件調用的位置。 正如我在最初的問題中指出的那樣,我像這樣回應小部件:
<?php $this->endBody() ?>
<?php
echo DildenFeedback::widget();
?>
然而,我沒有注意那個電話在哪里。 它需要在 endBody 調用之前
<?php
echo DildenFeedback::widget();
?>
<?php $this->endBody() ?>
這最終解決了這個問題。 感謝 Soju 指導我進行小部件調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.