Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ExtJS:同步组合框和标记字段_Javascript_Extjs - Fatal编程技术网

Javascript ExtJS:同步组合框和标记字段

Javascript ExtJS:同步组合框和标记字段,javascript,extjs,Javascript,Extjs,客户请求申请人能够从选项列表中进行主要选择,但也可以从相同选项中进行多项选择。主值和次值不能重叠 例如,两个颜色选择问题: Favorite Color: SELECT Other Colors: SELECT 用户选择最喜欢的红色: Favorite Color: RED Other Colors: SELECT ORANGE YELLOW GREEN B

客户请求申请人能够从选项列表中进行主要选择,但也可以从相同选项中进行多项选择。主值和次值不能重叠

例如,两个颜色选择问题:

Favorite Color: SELECT  Other Colors: SELECT
用户选择最喜欢的红色:

Favorite Color: RED     Other Colors: SELECT
                ORANGE
                YELLOW
                GREEN
                BLUE
                PURPLE
红色现在已从其他颜色消失:

Favorite Color: RED     Other Colors: ORANGE
                                      YELLOW
                                      GREEN
                                      BLUE
                                      PURPLE
用户选择其他颜色绿色和蓝色:

Favorite Color: RED     Other Colors: GREEN BLUE
绿色和蓝色不再是最喜欢的颜色:

Favorite Color: RED     Other Colors: GREEN BLUE
                ORANGE
                YELLOW
                PURPLE
用户选择不同的喜爱颜色紫色:

Favorite Color: PURPLE  Other Colors: GREEN BLUE
其他颜色现在为红色,但没有紫色:

Favorite Color: PURPLE  Other Colors: GREEN BLUE
                                      RED
                                      ORANGE
                                      YELLOW
我曾考虑将组合框与标记字段配对,但正如您所看到的那样,试图使商店双方保持一致是一件麻烦事。我尝试使用过滤器,但它们似乎无法动态工作


在ExtJS中有更简单的方法吗?就像一个标记字段有一个存储区但有两个输入框,一个限制一个选择,另一个允许多个?

您可以使用过滤器动态过滤存储区

对于第一个组合框,您需要创建一个只过滤单个选择的过滤器

select: function(comb, record) {
    const value = record.get('abbr');
    const otherColors = Ext.getCmp('OtherColors');
    const otherColorsStore = otherColors.getStore();
    otherColorsStore.setFilters([{
        property: 'abbr',
        operator: '!=',
        value   : value
    }]);
},
对于配置了多选的secound组合框,您需要创建一个值数组,该数组应为第一个组合框过滤掉,然后使用


谢谢。重要的技巧是复制存储,以便应用独立的过滤器。我在使用同一家商店时遇到了各种问题。
select: function(me,records) {
    const favouriteColor = Ext.getCmp('FavouriteColor');
    const favouriteColorStore = favouriteColor.getStore();
    const values = records.map(r => r.get('abbr'));  // creates an array of all colors to filter out
    favouriteColorStore.setFilters([{
        property: 'abbr',
        operator: 'notin',
        value   : values
    }]);
 }