Sencha ExtJS 4 Linked Combobox问题

时间:2012-01-31 10:22:50

标签: javascript css ajax extjs frameworks

我正在试验ExtJS 4 Combobox AJAX Store中的一个错误。

我有一个包含文章的网格,每个文章都有供应商类别,每个供应商优惠属于某个类别的文章。为了过滤网格,我放了2个Combos(选择列表)。一个用于供应商,另一个用于类别。这些组合通过AJAX从PHP脚本中获取它们的值。

一切顺利,直到我试图链接这样的组合:

当用户从组合框中选择类别时,供应商商店会向提供该类别的供应商刷新(工作正常!)。

用户从组合框中选择供应商类别商店刷新(刷新是好的,如firebug所示)。

现在我的问题是,如果用户再次选择类别组合框,则加载掩码不会消失,因此无法更改组合的值。

我已经测试过并且AJAX工作正常,这只是装载蒙版的EXTJS 4问题。

问题是双向发生的:

A)

1. 用户选择一个类别

2. 用户选择供应商

3。用户无法选择类别(加载掩码不会消失)

B)

1. 用户选择供应商

2. 用户选择一个类别

3. 用户无法选择供应商(加载掩码不会消失)

修改

在这些情况下似乎也会出现问题(反之亦然:供应商 - >类别)

1. 用户选择一个类别

2. 用户更改类别

3. 用户无法选择供应商(加载掩码不会消失)

以下是我的模特:

    Ext.define('Category', {
        extend: 'Ext.data.Model',
        fields: [
            { name: 'name'},
            { name: 'id'}
        ]
    });

    Ext.define('Supplier', {
        extend: 'Ext.data.Model',
        fields: [
            { name: 'name'},
            { name: 'id'}
        ]
    });

以下是我的商店:

    var categoryStore = Ext.create('Ext.data.Store', {
        model: 'Category',
        autoLoad: true,
        remoteSort: true,
        proxy: {
            type: 'ajax',
            url: 'GetCategorysForSupplier',
            reader: {
                type: 'json',
                root: 'items'
            },
            extraParams: {
                supplier: 0
            }
        }
    });

    var supplierStore = Ext.create('Ext.data.Store', {
        model: 'Supplier',
        autoLoad: true,
        remoteSort: true,
        proxy: {
            type: 'ajax',
            url: 'getSuppliersForCategory.php',
            reader: {
                type: 'json',
                root: 'items'
            },
            extraParams: {
                category: 0
            }
        }
    });

这是我的连击:

    var categoryFilterCombo = Ext.create('Ext.form.field.ComboBox', {
        xtype: 'combo',
        store: categoryStore,
        displayField: 'name',
        valueField: 'id',
        fieldLabel: 'Category Filter',
        listeners: {
            change: function(field,newVal) {
                if (Ext.isNumeric(newVal)) {
                    supplierStore.proxy.extraParams.category = newVal;
                    articleStore.proxy.extraParams.category = newVal;
                    supplierStore.load();
                    articleStore.load();
                }
            }
        }
    });

    var supplierFilterCombo = Ext.create('Ext.form.field.ComboBox', {
        store: supplierStore,
        displayField: 'name',
        queryMode: 'local',
        valueField: 'id',
        fieldLabel: 'Supplier Filter',
        listeners: {
            change: function(field,newVal) {
                if (Ext.isNumeric(newVal)) {
                    categoryStore.proxy.extraParams.supplier = newVal;
                    articleStore.proxy.extraParams.supplier = newVal;
                    categoryStore.load();
                    articleStore.load();
                }
            }
        }
    });

亲切的问候,

Dan Cearnau

1 个答案:

答案 0 :(得分:1)

在这里寻找答案:http://www.sencha.com/forum/showthread.php?152324-4.0.7-ComboBox-bug-with-load-mask

ldonofrio说: 这是一个4.0.7的bug,似乎在4.1pr中解决了

我的覆盖 PHP代码:

Ext.override(Ext.LoadMask, {
      onHide: function() { this.callParent(); }
}); 
相关问题