Extjs4 ExtJS 4.x:如何禁用;“肮脏记录”;Ext.grid.Panel单元格中的红色角?

Extjs4 ExtJS 4.x:如何禁用;“肮脏记录”;Ext.grid.Panel单元格中的红色角?,extjs4,Extjs4,我有一个Ext.grid.Panel(又名gridpanel)和一个存储,仅用于客户端视觉效果(即,没有任何内容保存到服务器)。当我创建新的模型实例并将它们添加到存储中时,它们会显示在网格中,并带有一个红色角(可能表示尚未保存存储更改) 目前,我正在对每个记录/模型调用.commit()方法,然后再将其添加到存储中,以防止网格中出现脏记录的红色角落 是否有一种更通用的方法可以简单地配置网格面板,使其不显示有关记录“脏”状态的任何可视指示器? 注意:中的解决方案要么涉及CSS,要么仅适用于ExtJ

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

目前,我正在对每个记录/模型调用.commit()方法,然后再将其添加到存储中,以防止网格中出现脏记录的红色角落

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


注意:中的解决方案要么涉及CSS,要么仅适用于ExtJS3。我希望能找到一个适用于ExtJS 4的编程“设置”。

尝试在store上编写侦听器,该示例在以下问题的答案中给出:

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

远程代理是相当硬的编码,用于跟踪是否已将更改保存到服务器


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

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

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


感谢大家的集思广益和更多信息。我把这个扔了,这样将来遇到这个问题的人都能清楚地看到我问题的答案。

它是有效的!但它和我一样脏。只是为了快速解决问题

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

它在ExtJS4.1.1中再次工作。 在gridview中使用markDirty configurationProperty

如果有GridPanel,请按如下方式使用:

viewConfig:{
    markDirty:false
}

事实上,有另一种方法可以通过编程解决这个问题(一种非CSS的黑客行为),并在ExtJS4.2中得到验证

record.modified = {};
或者更具体地说

delete record.modified[fieldName]

我有一个带有复选框的表单,它只表示瞬时数据。选中该框会将列标记为脏,这对我的手机没有意义。如果其他列不同步,它们可能需要脏标记。我的解决方案灵感来自@Roman的答案,但更多地控制了哪些列得到治疗

在配置列中:

{
    xtype: 'checkcolumn',
    tdCls: 'no-dirty',
    dataIndex: 'selected',
    width: 50,
    text: 'Check'
},
在我的CSS中

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

我有一个类似的设置,有一个由
localStorage
代理支持的存储。当我使用这个存储在网格中获得脏记录时,我使用(这里来自ExtJS 4.2.1)将存储与网格同步,从而删除“脏”标记。

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

要执行的步骤:

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

    e、 g.record.modified={}

  • 这应该在调用ext的loadRecords()之前完成,它可能在model或store中(您可以重载ext.data.store的onProxyLoad()方法) )

修复:

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

您需要一个不涉及CSS的解决方案(标准解决方案)。这是因为您希望用户能够设置是否显示脏三角形?那么一个基于用户交互以编程方式调整CSS的方法呢?ExtJS有一些方法可以做到这一点,但它会涉及CSS。谢谢。我快速浏览了ExtJS源代码,并确认没有编程方式“配置”网格以不显示红色角落。你说得对——CSS(以某种形式)是实现这一点的唯一方法,而不必费心提交模型、同步存储等等。谢谢,但这正是我已经在做的事情(对每条记录调用.commit())。希望避免这种情况,只需在GUI上“翻转一个开关”就可以不显示红色角落。感谢内存(vs.远程)代理的提示。在这种特殊情况下,我更愿意让存储本身加载,因此您的回答有助于确认它确实需要基于CSS的解决方案,因为Ext 4.1.0 Beta现在可以使用viewConfig:{markDirty:false}我从4.0开始就使用viewConfig。从未检测到它的问题…另一种方法可能是为记录更改添加侦听器,并立即触发记录。提交()。。。。(如果可以应用于您的话,甚至可以存储.commitChanges())或
record.commit()
在更改记录后立即执行。但是
markDirty
是最好的方法。对于TreePanel也很好。我知道这是一篇老文章,但是对于ExtJS 4.2+,GridView有一个属性
markDirty
,可以设置为false。