2016-03-01 59 views
0

我在代码中添加了一个监听器,如:约ExtJS的afterLayout

listen: { 
    afterLayout: function(){ 
     doSomething... 
    } 
} 

的功能是呈现HTML标签。但是当页面加载时它不起作用。我需要强制渲染页面,比如改变浏览器的大小才能工作。我想知道为什么。 “afterLayout”应该在页面加载正确后自动工作?或者我错过了什么?

+0

版本的ExtJS的? –

+0

@ Mr.George 4.1.x我忘了确切的版本,因为代码是公司的。 – nasuf

回答

0

我觉得你的事件搜索AfterRender阶段。 仅当窗口大小发生变化而不是负载时才会触发Afterlayout。 afterrender事件匹配后加载感兴趣的组件的布局。 所以你应该试试这个:

listen: { 
    afterrender: function(){ 
     doSomething... 
    } 
} 

如果必须调用同一个函数在所有情况下调用它AfterRender阶段和afterlayout

+0

感谢您的回答。我试图像你说的那样使用afterrender,但它没有奏效。我不知道为什么所以我试图在Layout之后尝试。有没有任何先决条件,使其工作?再次感谢。 – nasuf

+0

尝试重现上煎茶拨弄你的问题,所以我可以尝试直接解决问题 –

+0

AfterRender阶段被称为子组件的渲染发生之前!也许你正在寻找'boxready'事件,一旦所有的子组件被渲染,这个事件就会被调用。 – Alexander

0

我认为你的问题可以解决viewport。 将您的应用程序包装在此组件中。视口会听窗口大小的变化,并自动重新大小它的子元素(应用程序)

1

您使用的是错误的配置。取而代之的listen: {使用listeners: {

下面是一个例子:https://fiddle.sencha.com/#fiddle/16gu

Ext.application({ 
    name : 'afterRender Test', 

    launch : function() { 
     Ext.create('Ext.container.Container', { 
      renderTo: Ext.getBody(), 
      listeners: { 
       afterRender: function() { 
        this.update('<div style="width:300px; background-color:red; padding:10px;">Added via afterRender listener</div>'); 
       } 
      } 
     }); 
    } 
}); 
+0

感谢您的提醒。其实它是我的代码中的听众。我在这里犯了一个错误。 – nasuf