根据网格中的值禁用组合编辑器的项目

时间:2012-03-23 11:09:28

标签: extjs

我试图在编辑网格中禁用组合编辑器的某些项目,具体取决于网格行中的值。

以下代码的问题在于,它在首次使用组合时正确禁用了组合项,但之后保持不变。

当我点击组合时,焦点事件总是被触发并且循环运行并且r.data按原样更新,但组合项目的显示方式在初始显示后不会更改。

有人可以帮我解决这个问题吗?

THX。

SWK

var lifecycle_combo = new Ext.form.ComboBox({
    typeAhead : true,
    mode : 'local',
    triggerAction : 'all',
    valueField : 'value',
    lazyRender : true,
    displayField : 'text',
    store : ref_lifecycle_store,
    listeners : {            
        focus: function(combo, gr, index){
            var lfc=usergrid.activeEditor.record.data.ref_lifecycle;
            ref_lifecycle_store.each(function(r){
                switch(lfc)
                {
                case 'anonymized':
                    if (r.id!='deleted')
                        r.data.selectable=false;
                  break;
                case 'deleted':
                    r.data.selectable=false;
                  break;
                default:
                    if (r.id=='logged_in' || r.id=='some_closed' || r.id=='all_closed')
                        r.data.selectable=false;
                    else
                        r.data.selectable=true;
                }
            });    
        },            
        beforeselect : function(combo, r, index) {                
            return r.get('selectable');
        }
    },
    tpl: '<tpl for=".">' + 
    '<div ext:qtip="{tip}" class="x-combo-list-item ' + 
        '<tpl if="selectable == false">' + 
            'x-combo-list-item-unselectable' + 
        '</tpl>' + 
    '">{text}</div>' + 
    '</tpl>'  
});

2 个答案:

答案 0 :(得分:0)

这是ExtJs4还是4?尝试过滤您在Combobox中使用的商店。它应该只留下您过滤的记录。

答案 1 :(得分:0)

由于您从商店获取字段值,因此对字段值执行的所有操作都应该仅通过存储完成。最好的方法是通过使用getStore获取项目并使用删除它来删除项目removeAt()方法