2016-08-12 34 views

回答

4

正如亞歷山大所建議的那樣,爲父容器重寫beforeLayoutafterLayout取得了訣竅。

beforeLayout: function() { 
    var me = this, 
     scroller = me.getScrollable(); 
    me.callParent(arguments); 
    if (scroller) { 
     me.savedScrollPos = scroller.getPosition(); 
    } 
}, 
afterLayout: function() { 
    var me = this, 
     scroller = me.getScrollable(); 
    me.callParent(arguments); 
    if (scroller && me.savedScrollPos) { 
     scroller.scrollTo(me.savedScrollPos); 
    } 
}, 
3

updateLayout是不一樣的refresh,並preserveScrollOnRefresh僅保留上refresh滾動。你可以看看ExtJS代碼他們是如何做到的(他們並不真正「保留」滾動,他們存儲滾動位置並在刷新後滾動回正確的位置),併爲updateLayout實現相同的功能。

0

爲了覆蓋更多的選項有任何類似的問題:

更改佈局

正如問題Avoid Ext.form validation scrolling to top提到的,有時只是改變layout可以做的伎倆。

對於ExtJS的4.x的示例形式具有由缺省(ExtJS的6具有vbox),這引起了形式滾動到頂部上的表單字段的驗證,如果你改變了佈局vbox指定anchor佈局,它不滾動到達頂點。

暫停佈局

如果你有一個組成部分,這並不需要更新其變動的佈局,則可以使用suspendLayout配置。