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
。
我确信某个地方只缺少一个细节。
感谢您的帮助。
答案 0 :(得分:0)
在最新版本的dojo中,DataGrid的公共 refresh()
方法已被删除。您可以使用formGrid._refresh()
。
请注意,出于某种原因,他们必须删除公共功能,这违背了OOPS的理念。
作为一般建议,在无法找到其他解决方案的情况下,请尝试在firebug控制台的单行模式中键入formGrid.
。当您键入.
时,您会得到相关对象的所有成员和属性的列表,包括所有公共成员(通常在开头没有_)和所有私有成员(通常在开头是_)。
如果它在firebug中不起作用,请尝试使用chrome中的优秀控制台。