2012-01-12 112 views
2

我用这个代码,论坛上发现没有4.0.2a错误,现在4.0.7给了我错误f是空,所以我检查与萤火虫,并发现为什么这个extjs代码在extjs 4.0.7中返回null?

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"); 
        } 
       } 
      }]   
}); 

回答

3

我已经在这里找到一些错误。

  1. 正如你已经知道的child('iframe')返回null,因为在Ext4中,它选择一个直接子对象(与Ext3相反)。您应该使用down('iframe')代替
  2. bodyiframePanel未定义,使用getTargetEl()代替
  3. printpanel.down('#ds_print_panel')不工作都不是,你可以使用如。 this.findParentByType('panel')

这里是工作示例:http://jsfiddle.net/Cu9DZ/3/

+0

非常感谢。仍在萤火虫控制台上抛出正文为空错误 – 2012-01-12 10:05:05

+0

我没有这个错误。您可以将您的代码与jsfiddle上的示例进行比较。 – Krzysztof 2012-01-12 10:42:47

+0

是的,它只是我,即时通讯使用sanbox版本在我的网页。似乎它不适用边框:错误等。再次呈现模板感谢 – 2012-01-12 12:56:38