面板 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 使用加载器配置的主要内容,如果未能解决你的问题,请参考以下文章
afterRender vs didInsertElement