关于 extjs:Resolving Dirty Flag in Ext.grid.Panel cell

Resolving Dirty Flag in Ext.grid.Panel cell

在 Ext JS 网格中,我正在编辑单个单元格。在其中一列中,我有一个触发 Save 事件的 Save 按钮。如何删除已编辑单元格中的脏标志(在下图中的红色框中)?我不知道如何使用代理执行创建、更新和销毁选项,因为文档中有一个很好的示例,所以我计划对这些步骤进行 AJAX 请求,直到我可以进行实际的 Sencha 培训。但是,如果我直接使用存储和代理,脏标志会自行解决,我宁愿以正确的方式进行操作。

enter

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
            }, {
                header: 'Save',
                xtype: 'actioncolumn',
                align: 'center',
                width: 50,
                sortable: false,
                items: [{
                    icon: './Scripts/extjs/examples/shared/icons/fam/add.gif',
                    tooltip: 'Save Row',
                    handler: function (grid, rowIndex, colIndex) {
                        store.sync();                            
                        alert('saving');
                    }
                }]
            }, {
                header: 'Delete',
                xtype: 'actioncolumn',
                align: 'center',
                width: 50,
                sortable: false,
                items: [{
                    icon: './Scripts/extjs/examples/shared/icons/fam/delete.gif',
                    tooltip: 'Delete Task',
                    handler: function (grid, rowIndex, colIndex) {
                        store.removeAt(rowIndex);
                        store.sync();
                        alert('deleting');
                    }
                }]
            }

  • 我不明白你想要什么。你想删除脏标志吗?
  • 是的,这就是我想做的


试试这个:

1
2
3
4
5
6
7
8
// you can keep the way you are creating your Grid
Ext.create('Ext.grid.Panel', {
    // other options
    // these configs are sent to Ext.view.Table through Ext.grid.View
    viewConfig: {
        markDirty: false
    }
});

我没有测试它,但我认为这就是你需要的。看看:

  • http://dev.sencha.com/deploy/ext-4.1.0-gpl/docs/index.html#!/api/Ext.grid.View
  • http://dev.sencha.com/deploy/ext-4.1.0-gpl/docs/index.html#!/api/Ext.view.Table
  • http://dev.sencha.com/deploy/ext-4.1.0-gpl/docs/index.html#!/api/Ext.view.Table-cfg-markDirty

阅读 Ext.view.Table 类的描述,你就会明白做了什么。

  • 我喜欢你的回答,所以我会给你一些分数,但我认为如果最终用户知道单元格很脏并且他们实际上知道他们在给定行上单击了保存,这将对最终用户有益.感谢您的意见。
  • 这次真是万分感谢。我不想显示指示器,因为此网格是需要保存的较大表单的一部分。所以,客户不想看到这些,而且真的没有必要添加额外的代码来提交每次编辑的记录。


Grid 反映了底层 Store 的状态,它是基于您的数据模型的记录集合。因此,在弄清 Ajax 代理之前,作为一种捷径,您可以这样做:

1
2
3
4
5
6
7
8
// Save handler
handler: function(grid, rowIndex, colIndex) {
    store.sync(); // Doesn't work now

    store.getAt(rowIndex).commit(); // Commit changes, clearing dirty flag

    alert('Record should now be clear');
}

  • 请注意,您应该只在同步成功完成后提交,通过将回调传递给 sync()
  • 该处理程序附加到哪里(作为其成员),存储变量在哪里声明?
  • @DirkSchumacher 在上面的示例中, handler 附加到带有工具提示"保存行"的操作列项目。当用户通过单击或按 Enter 键激活 Action 项时调用此函数。该示例中的 store 是一个封闭变量;首选方法是从 Grid 实例中获取它:grid.getStore()