ExtJS 4.x:如何禁用"脏记录" Ext.grid.Panel单元格中的红色角落?

时间:2012-01-02 16:07:05

标签: extjs4

我有一个带有商店的Ext.grid.Panel(又名gridpanel),仅用于客户端视觉效果(即,没有任何内容保存到服务器)。当我创建新的模型实例并将它们添加到商店时,它们会在网格中显示一个红色的角(可能表示存储更改尚未保存)。

目前,我在每个记录/模型上调用.commit()方法,然后将其添加到商店中,以防止网格中的脏记录红色角落。

是否有更简单的方法来简单地配置网格面板,以便不显示有关记录“脏”状态的任何可视指示器?

注意:this similar question中的解决方案涉及CSS或仅适用于ExtJS 3.我希望找到一个适用于ExtJS 4的编程“设置”。

8 个答案:

答案 0 :(得分:60)

它再次在ExtJS 4.1.1中工作。 在gridview中使用markDirty configurationProperty。

当你有一个GridPanel时,请像这样使用它:

viewConfig:{
    markDirty:false
}

http://docs.sencha.com/ext-js/4-1/#!/api/Ext.grid.View-cfg-markDirty

答案 1 :(得分:7)

基于此处和Sencha论坛的回复,在查看ExtJS源代码后,答案基本上是:

不,没有一种简单的方法(至少在4.0.7中)将网格配置为不显示红色角而不使用CSS。

感谢所有人的头脑风暴和其他信息。我把它扔了,所以今后遇到这个问题的人都能看到我问题的明确答案。

答案 2 :(得分:4)

一种选择是避免使用远程代理,而是使用带有autoSync的内存代理:true,然后使用Ext.Ajax.request调用手动将数据加载到其中。

远程代理非常硬编码,可以跟踪是否已将更改保存到服务器。

如果要跟踪它们是否已保存到服务器,只是删除带角的可视指示,请使用CSS更改“脏”行的外观。如果要完全删除该跟踪,请不要使用远程代理。

答案 3 :(得分:4)

我有一个带有复选框的表单,它只代表瞬态数据。选中此框会将列标记为脏,这对我的单元格没有意义。如果它们不同步,其他列可能需要脏标记。我的解决方案受到@ Roman的答案的启发,但可以更好地控制哪些列得到治疗。

在列配置中:

{
    xtype: 'checkcolumn',
    tdCls: 'no-dirty',
    dataIndex: 'selected',
    width: 50,
    text: 'Check'
},

在我的CSS中

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

答案 4 :(得分:3)

有效!但它对我来说很脏。只是为了快速解决方案。

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

答案 5 :(得分:1)

实际上,在ExtJS 4.2中还有另一种以编程方式修复此问题(非CSS黑客)的方法

record.modified = {};

或更具体地说,

delete record.modified[fieldName]

答案 6 :(得分:1)

好吧,我已经得到了脏记录的解决方案,

要做的步骤:

  • 将记录的修改属性设置为空白对象;

    e.g。 record.modified = {};

  • 这应该在调用ext的loadRecords()之前完成,可能在模型或存储中(你可以重载Ext.data.Store的onProxyLoad()方法) )

<强>修正:

  • 脏记录红色标记将从网格中删除
  • 更新流:它只会传递PUT调用中的修改字段(在脏加载中,它会传递所有字段)

答案 7 :(得分:0)

尝试针对此问题的答案示例中的写入侦听器:EXT JS Store's Proxy: readers and writers