我正在迁移和扩展基于非常旧的 Dojo 框架的现有 Web 应用程序。
表的声明性设置:
老的
<table dojoType="FilteringTable" id="dataTable"
valueField="f_id" multiple="false" alternateRows="true">
<thead><tr>
<th field="f_fname">Firstname</th>
<th field="f_lname">Lastname</th>
</tr></thead>
</table>
新的
<table dojoType="dojox.grid.DataGrid" id="dataTable">
<thead><tr>
<th field="f_fname">Firstname</th>
<th field="f_lname">Lastname</th>
</tr></thead>
</table>
初始化表格存储:
老的
var tab = dojo.widget.byId("dataTable");
if(tab){
tab.store.setData([]);
}
新的
var tab = dijit.byId("dataTable");
if(tab){
if(!tab.store){
tab.store = new dojo.store.Memory({data:[]});
}
else{
tab.store.setData([]);
}
}
刷新数据:
老新
tab.store.setData(result.array);
旧版本表填满了数据,新版本表保持空白。两种情况下检索到的 Data 数组完全相同。
所以我想知道旧 FilteringTable 中使用的 store 和新 dojox DataGrid 中使用的 store api 之间应该解决哪些差异。
由于我通常不熟悉使用数据存储,因此我可能会遗漏一些关键部分。
从视觉上看,新的 Grid 似乎功能齐全。
更新
tab.update(); // tab = dojox.grid.DataGrid
没有使视觉部分保持最新。存储数据更改时 DataGrid 不应该更新,还是需要一些手动操作?
事实上,DataGrid 似乎根本不会对 Memory-Store 中的更改做出反应。也许这里缺少一些接线?
更新
我一直在以声明方式使用内存存储连接网格:
<div dojoType="dojo.store.Memory" jsId="memStore"></div>
<table dojoType="dojox.grid.DataGrid" id="dataTable" store="memStore">
<thead><tr>
<th field="f_fname">Firstname</th>
<th field="f_lname">Lastname</th>
</tr></thead>
</table>
我得到的第一件事是 DataGrid.js 中的 _setStore() 错误说:
this.store.getFeatures is not a function
. DataGrid 是否可能与所有商店不兼容?我的印象是 store api 是在 1.6 中标准化的。
如果是这样,是否有替代商店可与 javascript 数组输入一起使用。(如上所示)