问题是我不知道如何更新/重新呈现商店,数据网格或此过程中涉及的任何内容(代码有点乱,但如果有问题,请告诉我)< / p>
在旧的实现(正常工作)中,它是一个带有textArea的过滤器,在此textArea中,可以插入100个ID的限制,并使用它们创建查询。
在请求标头(Get)中作为参数传递的ID,数据已正确恢复并在网格中绘制。
这里有一些代码部分可以更好地理解问题。
First.js
gridLiveView = new LiveViewTable({
"storeLink" : 'monitor/store/communications',
'query' : _filterWidgets.getStoredValues(),
'useColumns' : [...]
},
on(selectButton, "click", function(event) {
_filterWidgets.storeValues();
gridLiveView.set('query', _filterWidgets.getStoredValues());
});
LiveViewTable.js
function(...) {
var grid = declare([ SortFormatterGrid (Custom Grid) ], {
refreshStore : null,
cacheStore : null,
constructor : function(args) {
lang.mixin(this, args);
// store definitions
var _jsonStore = new SortFormatterJsonRestStore({
idProperty : 'comId',
target : this.storeLink
});
this.cacheStore = new SortFormatterMemoryStore({
idProperty : 'comId'
});
this.store = new Observable(new Cache(_jsonStore,
this.cacheStore));
this.refreshStore = new SortFormatterJsonRestStore({
idProperty : 'comId',
target : this.storeLink
});
_filterWidgets.getStoredValues()返回包含过滤器值的地图。
商店和网格是自定义商店,从(dojo / store / JsonRest和dgrid / OnDemandGrid)扩展
现在,情况发生了变化,而不是限制为100,限制为20000 ids。结果,请求的标题太长,我收到一个错误。这就是为什么,尝试另一种解决方案。
不是在onClickEvent(gridLiveView.set('query',_ filterWidgets.getStoredValues());)上调用它,而是实现另一个方法,并在与Second.js中的构造函数相同的级别调用,但没有成功。
在LiveViewTable.js中添加的方法
update : function(queryMap) {
var url = 'monitor/store/communications';
xmlhttp = new XMLHttpRequest();
xmlhttp.open("POST", url, false);
xmlhttp.setRequestHeader("Content-type", "application/json");
xmlhttp.send(JSON.stringify(queryMap));
var data = JSON.parse(xmlhttp.responseText);
}
var data 具有我想在表格中显示的正确数据。但是我试图在this.data中设置一个新的Store,在this.data中,但是网格总是空的。也试过this.refresh()。
所以问题是,我在 var data 中有什么用来在网格中显示内容?
我尝试过这样的事情(没有成功):
this.data = data;
或
this.store = new Observable(new Memory({data: data}));
答案 0 :(得分:1)
您应该通过grid.set('store', ...)
设置新商店,如documentation中所述。直接重新分配store
属性并不会让dgrid知道商店实际发生了变化。