【问题标题】:ExtJs 3.4 set progressbar dynamicallyExtJs 3.4 动态设置进度条
【发布时间】:2015-06-13 01:54:46
【问题描述】:

我正在使用 plupload 上传一些文件,我的老板让我更新一些东西,比如有一个进度条而不是一些文本,在我开始上传之前,上传器是这样的:

App.uploader = new plupload.Uploader({
    // code omitted

    url: "actions/Upload.aspx",

    init: {
        //ownerwindow
        Error: function (up, err) {
            // code omitted
        },

        PostInit: function () {
            // code omitted
        },

        UploadProgress: function (up, file) {
            var p = up.ownerwindow;
            var totalpercent = ((Math.round(up.total.loaded / up.total.size * 100)))
            p.getEl().mask('Uploading: <br/>Total: ' + totalpercent + '%<br/>File: ' + file.percent + '%');
        },

        FileUploaded: function (up, file, response) {
            // code omitted
        },

        UploadComplete: function (up, response) {
            // code omitted
        },

        FilesAdded: function (up, files) {
            // code omitted
        }
    }
});

App.uploader.init();

但现在我想要 2 个进度条来提供反馈

  1. 显示文件%
  2. 显示要上传的剩余文件

所以我尝试初始化 UploadProgress 中的进度条,但没有成功

然后我尝试将其设置在 App.uploader 上方:

var upgradeProgressBar = new Ext.ProgressBar({
    id: 'pbar1'
});

并设置UploadProgress中的值:

p.getEl().mask('<div id="upload"><div id="fileProgress"></div><div id="totalProgress"></div></div>');

upgradeProgressBar.width = 50 / totalpercent;
upgradeProgressBar.text = up.total.uploaded + ' / ' + up.files.length + ' ( ' + up.total.failed + ' failed )';
upgradeProgressBar.renderTo = 'totalProgress';

但那里也没有运气,然后我得到这样的东西:

编辑: 所以正如@mindparse 提到的,我可以制作一个窗口并在那里添加一个具有进度条的面板。但是我对 extJS 还是很陌生,所以我有以下几点:

        win = new Ext.Window({
            applyTo: 'viewport',
            layout: 'fit',
            width: 500,
            height: 300,
            closeAction: 'hide',
            plain: true,

            items: new Ext.Panel({
                title: 'Upload Progress',
                preventBodyReset: true,
                width: 400,
                html: '<div id="upload"><div id="fileProgress"></div><div id="totalProgress"></div></div>'
            })
        });

        var upgradeProgressBar1 = new Ext.ProgressBar({
            id: 'pbar1',
            renderTo: 'fileProgress'
        });
        var upgradeProgressBar2 = new Ext.ProgressBar({
            id: 'pbar2',
            renderTo: 'totalProgress'
        });

这会引发Uncaught TypeError: Cannot read property 'dom' of null

这是视口:

App.Viewport = new Ext.Viewport({
    layout: 'border',
    id: 'viewport',
    border: true,
    items: [new App.regions.north.Panel(), { xtype: 'regionswestpanel', margins: '0 0 5 5' }, { xtype: 'regionscenterpanel', margins: '0 5 5 0' }],
    listeners: {
        afterrender: function (viewport) {
        }
    }
});

将 porgressbars 公开会更好,还是我可以在上传的东西中访问它们?

【问题讨论】:

  • 你能发布你的进度条配置吗?看起来它也显示在模式窗口的面板上?
  • 配置?进度条上的所有代码都在我的帖子中

标签: extjs extjs3


【解决方案1】:

您应该使用updateProgressupdateText 方法来动态更改外观。

此外,您应该在您的progressBar 中将renderTo 指定为配置选项:

var upgradeProgressBar = new Ext.ProgressBar({
    id: 'pbar1',
    renderTo: 'totalProgress'
});

编辑

根据我在 cmets 中的建议,只需使用 Ext.Window,如下所示:

var win = new Ext.Window({
                layout: 'auto',
                title: 'Upload Progress',
                width: 500, 
                closeAction: 'hide',
                modal: true,
                padding: 5,
                items: [
                    {xtype:'progress', id: 'pbar1'},
                    {xtype:'progress', id: 'pbar2'}
                ]
            });

【讨论】:

  • 谢谢,但是如果我在定义进度条时设置了 renderTo(在 pluploader 的东西之外),我会得到:Uncaught TypeError: Cannot read property 'insertAdjacentHTML' of null
  • 啊,那是因为 ExtJS 在实际渲染 div 之前试图将进度条渲染到 totalProgress div。作为测试,您可以在调用掩码后将创建 upgradeProgressBar 的代码移动到 UploadProgress 中。看看这是否适合你,我不太确定你是否应该像在 mask 调用中那样创建 div。
  • 创建 div 的想法很好,是因为我希望掩码上有多个进度条(一个用于信号文件,一个用于总进度),因此将其移动到 UploadProgress 将创建 2每次迭代的进度条(我可以在函数结束时清理它们,但我仍然必须创建它们)
  • 如何使用模态 Ext.Window,它包含一个带有两个进度条的面板,然后根据需要显示\隐藏窗口并在需要时更新进度条?这将达到同样的效果,但允许您使用纯 ExtJS 组件而不是手工制作的 dom。
  • 看看我在原始答案中的编辑,不需要像您尝试过的那样使用 renderTo\applyTo。此外,您可以使用 xtypes (lazy init) 快速创建子项。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-03
相关资源
最近更新 更多