Laravel Backpack Widget重复添加视图问题求助
CRUD控制器中Widget加载的视图重复插入两次问题
我为某模型创建了CRUD控制器,在setupCreateOperation方法中先调用Widget加载视图,再添加字段:
protected function setupCreateOperation(): void { Widget::add([ 'type' => 'view', 'view' => 'dt::template_fields_script', ]); /* 添加字段 */ }
对应的视图代码如下:
@push('after_scripts') <script> console.log("hello world")</script> @endpush
但视图被重复插入两次,控制台日志也执行了两次。移除Widget::add则视图完全不加载。我还尝试了以下方式添加,问题依旧:
Widget::add()->type('script')->content('assets/js/admin/document/template_script.js');
请问该问题的原因是什么?
问题原因
这种重复加载的情况,主要是这几个常见原因:
- 你使用的CRUD框架(比如Laravel Backpack这类常用工具)在渲染创建页面时,会多次触发
setupCreateOperation方法——比如初始页面加载触发一次,表单做AJAX验证或刷新时又触发一次,导致Widget被重复添加。 - 框架的Widget组件本身没有内置去重机制,只要调用
Widget::add就会往页面里追加一次内容,不会自动判断是否已经添加过相同的视图或脚本。 - 视图里用的
@push('after_scripts')指令,在页面多次渲染的场景下,会把脚本多次推入到脚本栈中,最终页面输出时就会重复出现。
内容的提问来源于stack exchange,提问作者KordDEM
相关产品推荐
相关产品推荐

