使用 jQuery EasyUI 的 datalist 組件時,反覆調用加載數據方法(如 loadData 或 reload),發現新數據追加在舊數據之後,導致列表內容不斷累積,而非替換。官方文檔中未明確列出「清空」方法,讓開發者困惑。
EasyUI DataList 內部依賴 Panel 組件 作為容器。清空數據的正確姿勢是:獲取底層 Panel,調用其 clear 方法。
// 選擇器根據實際 ID 調整,如 '#dl'、'#myDataList'
$('#dl').datalist('getPanel').panel('clear');
<ul id="dl" class="easyui-datalist" title="數據列表" style="width:300px;height:200px"
data-options="lines:true, valueField:'id', textField:'name'"></ul>
<script>
$(function(){
var $dl = $('#dl');
// 1. 初始加載
$dl.datalist('loadData', [{id:1,name:'項目A'},{id:2,name:'項目B'}]);
// 2. 後續刷新前,先清空
function refreshData(newData) {
// 核心步驟:清空面板
$dl.datalist('getPanel').panel('clear');
// 重新加載新數據
$dl.datalist('loadData', newData);
}
// 模擬按鈕點擊刷新
$('#btnRefresh').click(function(){
var newData = [{id:3,name:'項目C'},{id:4,name:'項目D'},{id:5,name:'項目E'}];
refreshData(newData);
});
});
</script>
datalist('getPanel'):返回 DataList 內部使用的 $.fn.panel 實例,該面板承載列表 DOM 結構。.panel('clear'):Panel 組件的內部方法,會移除面板內所有子元素(即列表項 `| 方法 | 代碼 | 優點 | 缺點 |
|---|---|---|---|
| Panel clear(推薦) | $('#dl').datalist('getPanel').panel('clear') | 徹底清空,重置內部狀態,官方設計路徑 | 需知道依賴關係 |
| 銷毀重建 | $('#dl').datalist('destroy'); $('#dl').datalist(options) | 徹底重置 | 性能差,事件綁定丟失,需重新初始化 |
| 清空數據源 | $('#dl').datalist('loadData', []) | 語義清晰 | 某版本可能不生效,殘留 DOM |
| 直接操作 DOM | $('#dl').empty() | 簡單暴力 | 破壞組件內部狀態,極易導致後續操作異常 |
官網文檔確實不夠全面,建議採用以下方式查閱完整 API:
jquery.easyui.min.js 或對應模塊文件(如 datalist.js)。panel、list),依賴組件的所有方法均可鏈式調用。$('#dl').datalist('getPanel') 查看返回對象,再輸入 .panel( 觸發智能提示查看所有可用方法。EasyUI DataList 清空數據的標準做法是 $('#dl').datalist('getPanel').panel('clear')。理解組件間的依賴與組合關係,善用 getPanel、getPager 等橋接方法,能解決 90% 的「文檔找不到方法」難題。養成「看依賴、查源碼、試控制台」的習慣,是駕馭 EasyUI 的關鍵。