【问题标题】:How to find out if dgrid has finished with loading data from store如何确定 dgrid 是否已完成从商店加载数据
【发布时间】:2012-11-21 09:54:40
【问题描述】:

有人知道我怎样才能知道 dgrid 是否已完成从商店加载数据?

我一直试图在 dgrid 的 OnDemandList.js 中找到一种方法,但不幸的是,它超出了我目前对 dojo 的了解。

谢谢

【问题讨论】:

    标签: dojo dgrid


    【解决方案1】:

    我前段时间为dgrid v0.3.0 提出了这个解决方案,但查看源代码似乎到目前为止没有任何变化,所以我将尝试调整我的解决方案以适应 v0.3.3。

    查看实际操作:http://jsfiddle.net/phusick/FkANy/

    问题是dgrid/_StoreMixin::_trackError在返回Deferred::when时没有定义success回调,因此你需要重写那个方法,定义success回调并触发刷新那里的事件。

    _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
    });
    

    【讨论】:

    • Thatnks,这正是我想要的。非常好的模块化解决方案。不得不说,你似乎是这里唯一愿意谈论 dgrid 的人 :)
    • 好吧,这个我花了大约一年前的时间,所以很遗憾不分享;)
    【解决方案2】:

    dgrid 0.3.5 上,您可以监听dgrid-refresh-complete 事件,在结果渲染完成时发出。

    OnDemandList/Grid wiki 页面:https://github.com/SitePen/dgrid/wiki/OnDemandList-and-OnDemandGrid

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-18
      • 2012-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多