Combobox无法聚焦并因此扩展

时间:2012-04-11 14:15:53

标签: extjs combobox callback focus jsonstore

我现在已经用了几行代码摆弄了两天,出于某种原因,我无法让它运行起来。

我想要的是什么:

用户从组合框中选择关系,并且随后必须从由第一组合框过滤的人员列表中选择人。如果只有一个人,则必须直接选择。如果它有多个,我希望组合框扩展,当然还要显示检索到的人员列表。听起来很简单。

onRelationContactSelect()是通常在选择人员时执行的代码。由于在手动设置值时未触发选择事件,因此我只需手动调用即可。我在load事件的回调中有代码,以确保从服务器检索数据。这需要首先扩展或选择记录。

问题:

当我有一条记录(records.length == 1)时,一切都像魅力一样。当我有超过1条记录时,组合框contactCombo无法扩展。我通过ExtJs内部代码调试了很多,原因是它没有焦点。无论我尝试调用contactCombo.focus(),它都会 而不是 焦点。因此它不会扩大。为了让它更烦人,我可以使用以下代码扩展另一个组合框:

function onRelationContactSelect() {
categorieStore.load({ callback: function(r, options, success) {
    //debugger;
    //categorieCombo.focus();
    //categorieCombo.expand();
}});
categorieCombo.focus();
categorieCombo.expand();

}

可以看出,我在回调中调用了focus()和expand() ,但是类别存储的模式是“本地”#。 categorieStore中的数据是静态的,但仍然从服务器中检索。

代码:

function onRelatieSelect() {
contactStore.baseParams = {"relatieId": relatieCombo.value };
contactStore.load({callback: function(records, options, success) {
    if(records.length == 1) {
        contactCombo.setValue(records[0].get('Id'));
        onRelationContactSelect();
    } else {
        contactCombo.clearValue();
        contactCombo.focus();
        contactCombo.expand();
    }
}}); 

openTicketRelationLabel.show();
gridTicketRelatie.show();
ticketRelatieStore.load({ params: {relatieId:relatieCombo.value}});
SetRelatieInfo();
SetContractsInfo();
setSfHoursOsab();
showRelationNotifications(relatieCombo.value);
}

我已经尝试了很多年,但似乎我根本无法从回调处理程序和回调处理程序之外聚焦组合框我还没有数据。

有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:0)

在对两种不同的组合框进行沙盒处理后,我找到了解决方案。

解决方案结果很奇怪但很简单:

categorieCombo.on('select', function() {
subcategorieCombo.focus();
subcategorieStore.load({ callback: function(r, options, success) {
    subcategorieCombo.focus();
    subcategorieCombo.expand();
} });

在加载前聚焦。

再次关注负载的回调。

除了需要关注两次之外,对此解决方案唯一不满意的是,我不知道为什么这是有效的,但它解决了我的问题。