почему этот код extjs возвращает ноль с extjs 4.0.7? - PullRequest
2 голосов
/ 12 января 2012

Я использовал этот код, который был найден на форуме без ошибок в 4.0.2a, и теперь 4.0.7 дает мне ошибку f равно нулю , поэтому я проверил с помощью firebug и обнаружил, что

getIframe: function() {
  return this.getTargetEl().child('iframe');
},

this.getTargetEl (). Child ('iframe') возвращает null

, поэтому любая идея, почему это происходит с 4.0.7?

http://jsfiddle.net/Cu9DZ/

Ext.define('Ext.panel.iframePanel', {
    extend  : 'Ext.panel.Panel',
    alias   : 'widget.iframePanel',

    src             : 'about:blank',
    loadingText     : 'Loading ...',
    loadingConfig   : null,

    renderTpl: [
        '<div class="{baseCls}-body<tpl if="bodyCls"> {bodyCls}</tpl><tpl if="frame"> {baseCls}-body-framed</tpl><tpl if="ui"> {baseCls}-body-{ui}</tpl>"<tpl if="bodyStyle"> style="{bodyStyle}"</tpl>>',
        '<iframe src="{src}" width="100%" height="100%" frameborder="0"></iframe>',
        '</div>'
    ],

    initRenderData: function() {
        return Ext.applyIf(this.callParent(), {
            bodyStyle: this.initBodyStyles(),
            bodyCls: this.initBodyCls(),
            src: this.getSource()
        });
    },

    initComponent: function() {
        this.callParent(arguments);
        this.on('afterrender', this.onAfterRender, this, {});
    },

    /**
     * Gets the iframe element
     */
    getIframe: function() {
        return this.getTargetEl().child('iframe');
    },

    getSource: function() {
        return this.src;
    },

    setSource: function(src, loadingText) {
        this.src = src;
        var f = this.getIframe();
        if (loadingText || this.loadingText) {
            this.body.mask(loadingText || this.loadingText);
        }

        f.dom.src = src;
    },

    resetUrl: function() {
        var f = this.getIframe();
        f.dom.src = this.src;
    },

    onAfterRender: function() {
        var f = this.getIframe();
        f.on('load', this.onIframeLoaded, this, {});
    },

    onIframeLoaded: function() {
        if (this.loadingText) {
            this.body.unmask();
        }
    }
});

var printpanel = Ext.create('Ext.panel.Panel', {
    title       : 'Print',
    width       : 800,
    height      : 300,
    renderTo    : Ext.getBody(),
    bodyPadding : 5,
    layout      : 'fit',
    items:  Ext.widget('iframePanel', {
            border  : false,
            src     : '',
            itemId  : 'ds_print_panel'
            }),
    tbar: ['->',{
                text        : 'Test',           
                listeners: {
                    click: function(){
                        printpanel.down('#ds_print_panel').setSource("http://www.rockstown.com/node/4");
                    }
                }
            }]          
});

1 Ответ

3 голосов
/ 12 января 2012

Я нашел несколько ошибок здесь.

  1. Как вы уже знаете, child('iframe') возвращает ноль, потому что в Ext4 он выбирает одного прямого дочернего элемента (в противоположность Ext3).Вы должны использовать down('iframe') вместо
  2. body не определено в iframePanel, использовать getTargetEl() вместо
  3. printpanel.down('#ds_print_panel') тоже не работает, вы можете использовать, например.this.findParentByType('panel')

Вот рабочий образец: http://jsfiddle.net/Cu9DZ/3/

...