Symfony 6.3.0中bootstrap-table数据显示异常求助
问题分析
页面刷新时先显示正确数据随后变为旧数据的核心原因是:
- 页面加载时,
data-toggle="table"自动初始化表格,加载Twig渲染的数据库正确数据; - 随后JS代码执行
bootstrapTable("destroy")销毁原有表格,重新初始化时未传入正确数据源,且列定义与原表格完全不匹配,导致表格被错误的配置/旧数据覆盖。
解决方案
方案一:保留服务器端渲染(推荐,改动最小)
无需销毁重建表格,直接动态修改导出配置即可,完全保留原有渲染的正确数据:
修改你的JS代码:
$(function () { $("#toolbar").find("select").change(function () { // 直接修改表格配置,无需销毁重建 $("#table").bootstrapTable('refreshOptions', { exportDataType: $(this).val(), exportTypes: ["csv", "excel"] }); }).trigger("change"); });
同时检查HTML表格的data-field与Twig变量的字段对应关系:
比如HTML中data-field="id"对应Twig的immeuble.IDImmeuble,建议统一字段名(比如把HTML的data-field="id"改成data-field="IDImmeuble"),避免字段映射错误。
方案二:全JS初始化表格(适合动态数据场景)
如果需要完全通过JS控制表格数据,去掉Twig的tbody渲染,改为JS传入数据源:
- 修改Twig模板(移除tbody的循环渲染):
<table id="table" data-toolbar="#toolbar" data-pagination="true" data-page-size="25" data-search="true" data-show-export="true" data-click-to-select="true" data-search-align="left" data-show-columns="true" class="table table-list table-bordered table-striped m-auto"> <thead> <tr> <th data-field="IDImmeuble" data-sortable="true" scope="col">N°</th> <th data-field="Adresse" data-sortable="true" scope="col">Adresse</th> <th data-field="CP" data-sortable="true" scope="col">CP</th> <th data-field="Ville" data-sortable="true" scope="col">Ville</th> <th data-field="ReferenceProprio" data-sortable="true" scope="col">Référence Propriétaire</th> <th data-field="DateEnquete" data-sortable="true" scope="col">Date de l'Enquête</th> <th data-field="Intermediaire" data-sortable="true" scope="col">Intermédiaire</th> <th data-field="SuiviPar" data-sortable="true" scope="col">Responsable du Dossier</th> <th data-field="Description" data-sortable="true" scope="col">Description</th> </tr> </thead> <tbody class="table-group-divider"></tbody> </table> <!-- 将Twig变量转为JS可识别的JSON数据 --> <script> const immeublesData = {{ immeubles|json_encode(constant('JSON_HEX_TAG')) }}; // 处理日期格式(如果后端返回的是原始日期字符串) immeublesData.forEach(item => { item.DateEnquete = new Date(item.DateEnquete).toLocaleDateString('fr-FR'); }); </script>
- 修改JS代码:
$(function () { // 初始化表格,传入正确数据源 $("#table").bootstrapTable({ data: immeublesData, exportTypes: ["csv", "excel"], // 可选:如果需要复选框列,在这里添加 columns: [ { field: "state", checkbox: true, visible: $("#toolbar select").val() === "selected" }, // 其他列可通过HTML定义,无需重复写,如需自定义可补充 ] }); // 处理导出类型切换 $("#toolbar").find("select").change(function () { $("#table").bootstrapTable('refreshOptions', { exportDataType: $(this).val(), // 动态控制复选框列显示 columns: $("#table").bootstrapTable('getOptions').columns.map(col => { if (col.field === 'state') { col.visible = $(this).val() === "selected"; } return col; }) }); }).trigger("change"); });
内容的提问来源于stack exchange,提问作者Morris
相关产品推荐
相关产品推荐

