当JsonRestStore有新数据时更新DataGrid

时间:2012-03-21 18:03:04

标签: dojox.grid.datagrid dojo

Dojo版本是1.7.2

我有一个DataGrid,它充满了来自MemoryStore的数据。它工作正常,但是当在商店中更新对象时,网格中的数据不会更新。

这就是网格和商店的连接方式:

formStore = Observable(new MemStore());
formGrid = new DataGrid( {
   store:ObjectStore( {objectStore:formStore} ),
   query:{id:"*"},
   structure:[
      { name:" ", field:"pending", width:"2em",
         formatter:function ( count, rowIdx, cell ) {
            return '<div style="font-size: smaller; text-align: right;">' + count + '</div>';
         }
      },
      { name:" ", field:"name", width:"auto",
         formatter:function ( formName, rowIdx, cell ) {
            return '<div style="white-space: nowrap;">' + formName + '</div>';
         }
      }
   ]

}, "formGrid" );

我有一个更新商店数据的功能:

function updateForms() {
   require( ["dojo/_base/xhr", "dojo/_base/array", "dojox/grid/DataSelection"],
               function ( xhr, array, DataSelection ) {
                  xhr.get( {
                     url:"services/jsonrest/form/",
                     content:{ id:"all" },
                     handleAs:"json",
                     load:function ( forms, io ) {
                        array.forEach( forms, function( form, idx ) {
                           formStore.notify(form, form.id);
                        });
                     }
                  } );
               } );
}

如果此功能运行时商店为空,则项目将显示在DataGrid中,但一旦项目在网格中,它们就不会更新。这是一个测试系统,每次调用时Form对象的一部分都会发生变化。

我最终做的是更改服务器上的方法以便一直返回所有项目,然后javascript函数就像这样:

function updateForms() {
   require( ["dojo/_base/xhr", "dojo/_base/array", "dojox/grid/DataSelection"],
               function ( xhr, array, DataSelection ) {
                  xhr.get( {
                     url:"services/jsonrest/form/",
                     content:{ id:"all" },
                     handleAs:"json",
                     load:function ( forms, io ) {
                        // reset all the items in the DataGrid
                        formGrid.setItems( forms );
                     }
                  } );
               } );
}

这也有效。选择保留,DataGrid不闪烁。但这有点打败了目的。

我发现这个article但是无法理解它。我尝试了很多东西而没有任何效果。在本文中,使用旧的dojo.connect语法而不是新的dojo.on

我确信某个地方只缺少一个细节。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

在最新版本的dojo中,DataGrid的公共 refresh()方法已被删除。您可以使用formGrid._refresh()

访问私人会员

请注意,出于某种原因,他们必须删除公共功能,这违背了OOPS的理念。

作为一般建议,在无法找到其他解决方案的情况下,请尝试在firebug控制台的单行模式中键入formGrid.。当您键入.时,您会得到相关对象的所有成员和属性的列表,包括所有公共成员(通常在开头没有_)和所有私有成员(通常在开头是_)。

如果它在firebug中不起作用,请尝试使用chrome中的优秀控制台。