延迟(defer)到底是做什么的?

16

我使用scrollIntoView()方法使我的网格滚动区域可见。当我向gridContainer中添加新的网格时,所以我会使用这个方法。这个方法运行良好,我可以从调试器中检查到。

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。不过我对你问题的其余部分不是很清楚。 - Evan Trimboli
2
信息不足,是什么导致了“defer”调用?为什么不使用滚动条API?“grid.body.dom”不是正确的滚动对象。 - Evan Trimboli
1
我不能使用任何其他API,因为“将此元素滚动到传递的容器中的视图中”只能通过scrollIntoView实现。 - David
1
这听起来不太对。网格主体本身是不可滚动的。 - Evan Trimboli
4
可以使用 fiddle 创建一个示例,以展示你的问题吗? - scebotari66
显示剩余3条评论
1个回答

3
一个解决方法是不要滚动到组件,而是使用卡片布局来显示新的网格在另一个卡片上。
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

我正在使用vbox,当我更改卡号时,第二个网格没有加载。好的,让我尝试一下你在答案中写的内容,并在一段时间后回复你。 - David
这样做不行,因为我这里只显示一个网格。我需要我的面板可以滚动。 - David

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接