extjs 3.4在呈现之前获取progressbar html表示

时间:2012-12-17 14:43:33

标签: javascript extjs progress-bar

我想知道在任何地方呈现进度条之前是否有任何方法可以获取进度条的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表示的函数(从其名称可以明显看出)。然后在自定义渲染器中使用generateRenderer()函数。

1 个答案:

答案 0 :(得分: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)

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