0

我想知道在任何地方呈现进度条之前是否有任何方法可以获取进度条的 html 表示?

我需要在网格中渲染进度条。至于现在我将自定义渲染器用于进度列:

renderer: function( value, metaData, record, rowIndex, colIndex, store ) {
                var id = Ext.id();
                (function(){
                    var progress = new Ext.ProgressBar({
                        renderTo: id,
                        value: progress_value
                    });
                }).defer(50);
                return '<div id="'+ id + '"></div>';
            }

但它看起来对用户不友好,因为进度条是在渲染网格之后渲染的。

我认为可以使用此功能创建自定义进度条,因为可以看到呈现为 html 的模板源代码,但我认为它并不那么优雅。

我认为最好的方法是创建这样的函数:

var generateRenderer = (function(){
        var pb = new Ext.ProgressBar();
        return function( progress_value ){
            pb.updateValue( progress_value );
            return pb.htmlRepresentationFunction();
        }
    })();

htmlRepresentationFunction()返回 html represetation 的函数在哪里(从它的名称可以明显看出)。然后generateRenderer()在自定义渲染器中使用函数。

4

1 回答 1

2

至于现在,我已经以这种方式重写了代码:

progressBarHtmlGenerator: (function(){
    var width = progress_width,
        cls = 'x-progress', // it's default class from ext.js
        tpl = new Ext.Template( // this template is from ProgressBar.js in ext.js
            '<div class="{cls}-wrap">',
                '<div class="{cls}-inner">',
                    '<div class="{cls}-bar" style="width: {barWidth}px">',
                        '<div class="{cls}-text">',
                            '<div>{text}</div>',
                        '</div>',
                    '</div>',
                    '<div class="{cls}-text {cls}-text-back">',
                        '<div>{textBack}</div>',
                    '</div>',
                '</div>',
            '</div>'
        );
    return function(value, text, textBack){
        return tpl.apply({
            cls: cls,
            barWidth: value*width || 0,
            text: text || '&#160;',
            textBack: textBack || '&#160;'
        })
    }
})()

这个模板来自 ProgressBar.js。然后我在我的自定义渲染器中使用这个函数,如下所示:

renderer: function( value, metaData, record, rowIndex, colIndex, store ) {
                var value = progress_value;
                return this.progressBarHtmlGenerator(value);
            }.createDelegate(this)

因此,因为我不需要动画它可以工作,但我仍然希望有一些比这更优雅的方式。

于 2012-12-18T10:24:06.067 回答