面板 afterRender 使用加载器配置

Posted

技术标签:

【中文标题】面板 afterRender 使用加载器配置【英文标题】:Panel afterRender using loader config 【发布时间】:2013-03-29 16:26:06 【问题描述】:

我创建了一个面板,其中包含加载器配置,可以将 jsp 页面加载到其中。 jsp 中有标记,我需要在我的 ext 控制器中附加一个侦听器。我遇到的问题是我在面板上收听 afterrender,但是 jsp 页面中的 dom 并不总是被渲染/加载,但它是一个时间问题(有时 afterrender 可以找到 dom,而其他时候它不能在此刻)。我尝试在加载器上放置一个监听器来监听负载。但是我又遇到了同样的问题,有时 dom 已经在那个时候被渲染了,而有时候它没有(这又是一个时间问题)。

Ext.create('panel', 
  listeners : 
       afterrender: 
           fn : function()
               Ext.dom.Query.select('#mydiv');//sometimes this finds it some times it doesn't
           
       
    
  loader : 
   url : '/my/jsp',
   autoLoad : true,
   listeners : 
       load : 
           fn : function()
               Ext.dom.Query.select('#mydiv');//sometimes this finds it some times it doesn't
           
       
    

);

jsp加载完毕,dom在面板中渲染后,是否有事件要监听?我认为在加载程序完成将jsp的dom加载到面板之前调用afterrender,并且与加载程序加载事件相同。在尝试查询 dom 并附加侦听器之前,我需要确保 jsp 中的 dom 在面板中呈现。

【问题讨论】:

您有没有为此找到可靠的解决方案? 【参考方案1】:

您可以尝试在监听器http://docs.sencha.com/ext-js/4-1/#!/api/Ext.EventManager-method-addListener 中使用延迟选项 这不是一个完整的证明方法,但可以为您工作。

【讨论】:

是的,我想过这个问题,但感觉就像一个黑客。我现在可以将其用作临时修复。 这不是解决方案。【参考方案2】:

加载器会触发一个加载事件,因此您可以使用以下命令收听它:

component.getLoader().on('load', function() 
    // do something
);

【讨论】:

我确实尝试过,但我遇到了同样的问题。仍然不总是有效,因为 DOM 并不总是在那个时候呈现。

以上是关于面板 afterRender 使用加载器配置的主要内容,如果未能解决你的问题,请参考以下文章

如何在加载模型时在Ember中显示加载模板?

Extjs - 在面板中设置焦点字段

Extjs 手风琴动态关闭所有面板

afterRender vs didInsertElement

如何在 Ember 控制器中运行操作 afterRender

如何在 afterrender 事件 Ext JS 中获取标题标签元素?