【问题标题】:How do I focus a combo box inside a grid panel?如何在网格面板内聚焦组合框?
【发布时间】:2011-07-15 14:07:17
【问题描述】:

我搜索了高和低,找不到这个,我所有的方法都不起作用。

基本上,这就是我所拥有的。我有一个包含许多行的网格面板(使用ExtJS 4)。每行都有一个包含组合框的列。

现在,我有一个“添加”按钮,单击该按钮会添加一个新模型并将其插入到商店中。效果很好。但是,用户必须使用鼠标并单击新插入行内的组合框才能开始输入。我们的应用主要集中在键盘上,不鼓励使用鼠标(作为数据输入应用)。

我可以选择第一行:

grid.view.getSelectionModel().select(newRow);

但是,里面的组合框没有焦点。

我该如何解决这个问题?

谢谢。

编辑

我试图在 SO 上发布我的源代码,但它一直超时,所以这是我的代码的 gist

https://gist.github.com/1089782

谢谢

【问题讨论】:

    标签: combobox extjs4 gridpanel


    【解决方案1】:

    我没有检查组合框,但它适用于文本字段:

    1. 首先将id分配给celledit插件:

      plugins: [ Ext.create('Ext.grid.plugin.CellEditing', { clicksToEdit: 1, id: 'my_plugin' }) ]

    2. 然后,如果 newRow 是新插入的模型并且带有组合框的列的索引 == 1,则可以使用: grid.getPlugin('my_plugin').startEditByPosition({row: newRow.index, column: 1});

    【讨论】:

    • 其实我已经用类似的方法解决了这个问题。我只是不明白它在 CellEditing 插件中。一旦我有了这个发现,就很容易了!这令人沮丧,因为我花了很多时间只是在错误的地方寻找。这就是我作为 ExtJS 新手所得到的。但无论如何我还是给了你赏金,因为你是这里唯一一个真正有正确答案的人。 :-) 谢谢
    【解决方案2】:
    1. 您必须在某处保存对该组合框的引用。例如,在记录中,您可能有字段“组合”,它将引用组合框。
    2. 选择后您必须执行以下操作:record.combo.fosus(); 仅此而已。

    【讨论】:

    • 我似乎找不到将参考放在哪里?我有一个名为“timeEntryDetailsEditorGrid”的var,其中包含组合框cbSiteActivities。但是在插入新行后调用 focus 没有任何作用
    • 将该代码放在 afterrender 事件中。 combo.on('afterrender', function(combo) {combo.focus()})
    • 谢谢。我试过了。 afterrender 事件仅在我实际单击组合框时才起作用。
    • 我看了一眼你的源代码,发现你有“autoRender : false”。也许这就是那个事件没有触发的原因......
    • 谢谢。尝试将其更改为 true,当我单击它时它根本不呈现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多