2017-01-30 42 views
16

我放置了scrollIntoView()使我的网格滚动可见。当我在gridContainer中添加新的网格时,我使用这种方法。这是我可以从调试器检查的工作。 我scrollIntoView()什么推迟呢?

grid.body.dom.scrollIntoView(); 

但是,一旦它在延迟功能达到它不是scrollIntoView()工作。任何人都可以请建议如何跳过这个。什么推迟做,如何跳过这个。此外,我正在使用grid.focus()并再次发生同样的事情。网格正在进入视图,但从调试器出来后没有出现在视图中。

defer: function(fn, millis, scope, args, appendArgs) { 
    fn = Ext.Function.bind(fn, scope, args, appendArgs); 
    if (millis > 0) { 
    return setTimeout(function() { 
     if (Ext.elevateFunction) { 
     Ext.elevateFunction(fn); 
     } else { 
     fn(); 
     } 
    }, millis); 
    } 
    fn(); 
    return 0; 
}, 
+1

'defer'基本上就像一个'setTimeout'。然而,我并不清楚你的问题的其余部分。 –

+0

@EvanTrimboli如果我不想超时,我需要做什么。我在一段时间后在我的网格中给出了'grid.body.dom.scrollIntoView();'这段代码不工作。 – David

+2

没有足够的信息,是什么导致了“延期”调用?你为什么不使用滚轮API? 'grid.body.dom'不是滚动的正确的东西。 –

回答

3

一种解决方法是不滚动到该组件,但使用card layout为中心容器并显示新的网格中的其它卡上。

var centerCt; // reference to your center container 
var centerLayout = centerContainer.getLayout(); 
var newGrid = Ext.create('Ext.grid.Panel', {}); 
centerCt.add(newGrid); 
centerLayout.setActiveItem(newGrid); 

我创建了一个Sencha Fiddle

+0

我正在使用vbox,当我更改为卡没有第二个网格加载。那么让我试试这个,不管你写的是什么答案,并在一段时间内回复你。 – David

+0

这不起作用,因为我在这里只显示一个网格。我需要我的面板可以滚动。 – David