在dojo Store中设置数据以重新呈现网格

时间:2014-11-24 10:56:30

标签: javascript dojo xmlhttprequest dgrid

问题是我不知道如何更新/重新呈现商店,数据网格或此过程中涉及的任何内容(代码有点乱,但如果有问题,请告诉我)< / 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}));

1 个答案:

答案 0 :(得分:1)

您应该通过grid.set('store', ...)设置新商店,如documentation中所述。直接重新分配store属性并不会让dgrid知道商店实际发生了变化。