【问题标题】:Get cell div id using beforecheckchange listener in extjs grid cell editing在 extjs 网格单元格编辑中使用 beforecheckchange 侦听器获取单元格 div id
【发布时间】:2016-03-17 14:13:40
【问题描述】:

我在 extjs 网格单元格编辑中使用 beforeCheckChange 监听器来处理 checkColumn

一旦取消选中,我想删除此单元格的脏标志。所以我试图删除"x-grid-dirty-cell" Cls,使用单元格div id。

Ext.select("ext-gen2654").removeCls('x-grid-dirty-cell');

下面是听者

listeners: {
    beforecheckchange: me.onCheckcolumnBeforeCheckChange
}

onCheckcolumnBeforeCheckChange: function(comp, rowIndex, checked, eOpts) {  
    Ext.select("ext-gen2654").removeCls('x-grid-dirty-cell');
}

如何仅获取此单元格的div id?

如果取消选中后我们是否有其他方法可以删除脏记录,请告诉我。

已编辑 - 替代记录的显示复选框

Ext.getCmp('grid').gridColumns[0]=  {
    xtype: 'checkcolumn',                                               
                dataIndex: 'SELECT',
                width: 55,
                stopSelection: true,
                renderer: function(value, metaData, record, rowIndex, colIndex, store, view) {
                if(row%2==0){  // i need to display alternative checkbox
                    var cssPrefix = Ext.baseCSSPrefix,
                    cls = cssPrefix + 'grid-checkcolumn';


                        if (this.disabled || value == 'N') {
                            metaData.tdCls += ' ' + this.disabledCls;
                        }
                if (!value) {
                cls += ' ' + cssPrefix + 'grid-checkcolumn-checked';
                }

                    return '<img class="' + cls + '" src="' + Ext.BLANK_IMAGE_URL + '"/>';
                        }

            }

,

try listener code to remove dirty mark, but no luck

    onCheckcolumnBeforeCheckChange: function(comp, rowIndex, checked, eOpts) {  
        var store=Ext.getCmp('grid').getStore();
        var record= store.getAt(rowIndex);
        if(checked==true){  
        record.dirty= false;
        record.commit();    
        store.commitChanges();

        }

【问题讨论】:

    标签: javascript extjs extjs4


    【解决方案1】:

    如果你想删除整个网格的脏标志,use markDirty on the grid view:

    viewConfig:{
        markDirty:false
    }
    

    如果您只想删除整个列的脏标志,只需在该列上设置一个 tdCls:

    tdCls:'doNotMarkDirty',
    

    并添加以下 CSS(在 Classic 主题中测试,其他主题可能不同):

    .doNotMarkDirty.x-grid-dirty-cell {
        background-image:none;
    }
    

    如果您想删除整个列的脏标志,并让模型忽略对列所做的任何更改,请尝试adding a custom isModified function to the model definition

    isModified:function(dataIndex) {
          if(dataIndex=="myDataIndex") return false;
          me.callParent(arguments);
    }
    

    如果您想让记录知道它不再脏,请查看record.commit()

    【讨论】:

    • 感谢您的详细信息。基本上我不想为此列禁用标记脏。我正在使用 checkcolumn 来显示复选框。当我检查 checobox 时它显示脏标记,但是当我取消选中时,它仍然显示脏标记。因此,当我取消选中它时尝试手动删除脏标记时。
    • 那么您的输入数据有问题。请尝试将您的模型字段标记为type:'boolean' 和/或添加defaultValue:false 是否有帮助。
    • 只要原始值与记录字段的当前值不同,就会显示脏标志。去图吧。
    • 我认为如果修改了任何字段,那么它会显示脏标志。如果我们重置它的原始值,它仍然显示脏标志
    • 对不起,但你认为什么并不重要,重要的是原始的 ExtJS 代码,它清楚地说明:if (me.markDirty &amp;&amp; record.dirty &amp;&amp; record.isModified(column.dataIndex)) { (view/Table.js:1569)。 I have made a fiddle for you, if you don't believe the code.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    • 2012-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多