有谁知道如何判断dgrid是否已完成从商店加载数据?
我一直试图在dgrid的OnDemandList.js中找到一种方法,但不幸的是,它超出了我目前对dojo的了解。
由于
答案 0 :(得分:3)
前段时间我想出了这个解决方案,对于dgrid v0.3.0
,但是看看源代码到目前为止似乎没有任何改变,所以我会尝试使我的解决方案适应v0.3.3。
查看实际操作:http://jsfiddle.net/phusick/FkANy/
问题是dgrid/_StoreMixin::_trackError
在返回Deferred::when
时未定义成功回调,因此您需要覆盖该方法,定义成功回调并在那里开火刷新事件。
_RefreshMixin
模块:
define(["dojo/_base/declare", "dojo/_base/lang", "dojo/_base/Deferred", "dojo/on"], function(declare, lang, Deferred, listen) {
function emitError(err){
if(typeof err !== "object"){
err = new Error(err);
}
err.grid = this;
if(listen.emit(this.domNode, "dgrid-error", {
grid: this,
error: err,
cancelable: true,
bubbles: true })){
console.error(err);
}
}
var _RefreshMixin = declare(null, {
_trackError: function(func){
var result;
if(typeof func == "string"){ func = lang.hitch(this, func); }
try{
result = func();
}catch(err){
emitError.call(this, err);
}
return Deferred.when(
result,
// success callback instead of `null` in _StoreMixin:
lang.hitch(this, function() {
// fire 'refresh' event
listen.emit(this.domNode, "refresh", {
cancelable: true,
bubbles: true
});
}),
lang.hitch(this, emitError)
);
}
});
return _RefreshMixin;
});
声明自己的网格类并实例化它:
var MyGrid = declare([OnDemandGrid, _RefreshMixin]);
var grid = new MyGrid({ /* params here*/ });
现在您可以收听刷新事件:
grid.on("refresh", function(event) {
// your handler
});
答案 1 :(得分:3)
在 dgrid 0.3.5 上,您可以收听结果完成呈现时发出的dgrid-refresh-complete
事件。
OnDemandList / Grid wiki页面:https://github.com/SitePen/dgrid/wiki/OnDemandList-and-OnDemandGrid