Javascript Dojo-调用sort后,数据网格中的行消失

Javascript Dojo-调用sort后,数据网格中的行消失,javascript,datagrid,dojo,store,dojox.grid.datagrid,Javascript,Datagrid,Dojo,Store,Dojox.grid.datagrid,在对网格进行排序时,我遇到了DataGrid的一个问题 使用此isseue,当我们在一个调用流中执行此操作序列时,所有行都将消失: 将一个项目添加到网格的存储中 从网格的存储中删除一项 储蓄商店 调用grid.sort 调用grid.sort后,对网格尿布中的所有行进行排序(尽管它们仍在存储中)。如果我们重复同样的步骤,他们就会回来 我有一个复制程序代码,基于DataGrid的自定义网格组件如下: 如果你像我在第38行那样调用MyGrid的addOneDelOne,你将能够重现这个问题 在此代

在对网格进行排序时,我遇到了DataGrid的一个问题

使用此isseue,当我们在一个调用流中执行此操作序列时,所有行都将消失:

  • 将一个项目添加到网格的存储中
  • 从网格的存储中删除一项
  • 储蓄商店
  • 调用grid.sort
  • 调用grid.sort后,对网格尿布中的所有行进行排序(尽管它们仍在存储中)。如果我们重复同样的步骤,他们就会回来

    我有一个复制程序代码,基于DataGrid的自定义网格组件如下:

    如果你像我在第38行那样调用MyGrid的addOneDelOne,你将能够重现这个问题

    在此代码中,如果有4个以上的项目,则从存储中删除项目

    此外,如果添加的项目数大于删除的项目数,则如果我们对网格进行排序,则不会出现此问题


    我已经在Dojo1.9和1.13上测试了它,我相信我们找到了这个问题的解决方案。 问题在于Dojo的DataGrid的fetchbegin方法

    当我们在DataGrid上调用sort时,它实际上通过调用updateRowCount(0)来清除一些计数器。

    清除的计数器之一是this.invalidated.rowCount,DataGrid和dojo实际使用它来打印记录。打印记录数等于此.invalidated.rowCount值

    稍后,在grid.sort()调用处理期间,dojo转到\u获取(0,isRender)方法。这个方法最终调用This.store.fetch({…}),它根据存储返回的项更新网格。它是通过回调方法_onFetchBegin和_onFetchComplete完成的。问题出在\u onFetchBegin

    在我们的例子中,从存储返回的项目数等于网格中的行数。if(this.rowCount!=大小)
    if(!size){
            this.views.render();
            this._resize();
            this.showMessage(this.noDataMessage);
            this.focus.initFocusView();
        }else{
            this.showMessage();   <- we ended up here. And we we do not update the RowCount :(
        }
    
    else{
            this.updateRowCount(size);
            this.showMessage();
        }