【问题标题】:Issue jumping to a row in a grid panel问题跳转到网格面板中的一行
【发布时间】:2013-12-03 10:27:40
【问题描述】:

我正在使用 Extjs 4.2。我有一个超过 1000 行的网格面板,它开启了多选。

当我点击一个按钮时,我想使用以下命令选择并移动到第 20 行:

grid.getSelectionModel().select(20, false, true);
grid.getView().getNode(20).scrollIntoView();

如果我在第 20 行附近,这可以正常工作,否则它会正确选择第 20 行,但它不会跳转到第 20 行,并且我收到错误:TypeError: grid.getView(...).getNode(...)未定义

非常感谢任何帮助。

【问题讨论】:

  • 请将您的代码放入jsfiddle.net
  • 您的网格是否使用buffered rendering?以及 Ext4.2 的哪个精确版本?
  • 我使用的是 4.2.2。我正在使用缓冲渲染 - 这是一个问题吗?
  • 感谢 Rixo 询问有关缓冲渲染的问题——我的网格使用了这个,我找到了一个示例,向我展示了如何跳转到缓冲行之外的行——我的答案如下。跨度>

标签: javascript extjs extjs4.2


【解决方案1】:

Rixo 让我找到了关于缓冲网格的正确路径。

我找到了这个例子: http://docs.sencha.com/extjs/4.2.0/extjs-build/examples/grid/buffer-grid.html

这是允许我跳转到第 20 行的行:

grid.view.bufferedRenderer.scrollTo(20, true);

【讨论】:

【解决方案2】:

问题是当你远离它时没有这样的节点,因为 GridView 根本不会因为性能问题而破坏 HTML 元素。您可以使用 gridView.focusNode(record) 代替:

var record = gridView.getStore().getById(20);
gridView.focusNode(record);

然后焦点选择记录:

grid.getSelectionModel().select(record);

【讨论】:

  • 我使用了 'grid.getView().focusRow(20)' 和 'grid.getView().focusNode(20);'具有相同的结果 - 如果我不止一页而且有点远,它不会滚动。唯一的区别是我没有收到错误。我用错了吗?
  • 方法 focusNode() 需要记录,而不是数字。请参阅我的更新答案。
  • 反其道而行之:先focusNode,然后选择它。
  • 我选择了一条记录,然后尝试将其聚焦:grid.getSelectionModel().select(20, false, true); var 记录 = grid.getSelectionModel().getSelection()[0]; grid.getView().focusNode(record); 这给了我和以前一样的问题。此外,我在 focusRow 上使用了延迟:'grid.getSelectionModel().select(20, false, true); grid.getView().focusRow(20, 100);'但同样的问题
  • 嗨,Andrei,我在获得行之前和之后都放了一个 getSelectionModel,但并不高兴。
【解决方案3】:

首先使用以下方法选择您的记录:

var rec = grid.store.findRecord('id',rowId);

使用选择记录:

grid.getSelectionModel().select(  rec  );

使用 :

聚焦记录
grid.getView().focusRow(  ); 

【讨论】:

  • 选择行似乎没有任何问题。我遇到的问题是滚动到有问题的行。当我超过一页并且有点远时,focusRow(20) 不起作用。 focusNode(rec) 也是如此
  • 一旦你选择了记录grid.getView().focusRow();会自动聚焦选中的记录。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-24
  • 1970-01-01
  • 2013-03-22
相关资源
最近更新 更多