Extjs4 如何在Ext 4网格面板中仅启用新行?

Extjs4 如何在Ext 4网格面板中仅启用新行?,extjs4,gridpanel,Extjs4,Gridpanel,所以我有一个extjs4网格面板,它有两列 列ONE是一个带有自定义渲染器的组合框 Ext.ux.comboBoxRenderer = function(combo) { return function(value) { var idx = combo.store.find(combo.valueField, value); var rec = combo.store.getAt(idx); return (rec == null ? '

所以我有一个
extjs4网格面板
,它有两列

ONE是一个带有自定义渲染器的
组合框

Ext.ux.comboBoxRenderer = function(combo) {
    return function(value) {
        var idx = combo.store.find(combo.valueField, value);
        var rec = combo.store.getAt(idx);

        return (rec == null ? '<img src="/js/extjs4/resources/themes/images/default/grid/loading.gif" />' : rec.get(combo.displayField) );
    };
}
现在,当我加载
数据存储时,我希望第一列是只读的。如果我设置
只读
标志,这很容易

但是,我有一个按钮,可以添加一个新的记录来存储,我希望新记录不具有只读标志

所以基本上,一旦您更改了第一列并保存,您就不能更改它。只能在保存新记录之前对其进行更改

这里的业务规则要求他们删除不正确的旧记录


谢谢。

我自己解决了这个问题

基本上,我在
selectionchange
事件中记录了这个组合。 然后,在
focus
事件中,我检查它是否有来自存储区的所需数据键。如果不是,那么我假设一个新行并运行以下命令:

focus: function(combo) {
           var cb = combo;
           if(newTEDetailRecord) {
              if(newTEDetailRecord.data["activityKey"] == "") {
                 console.log("newTEDetailRecord", newTEDetailRecord);
                 cb.setEditable(true);
                 cb.setReadOnly(false);
                 cb.focus();
                 cb.selectText();
              } else {
                 cb.setReadOnly(true);
              }
           }
        },
focus: function(combo) {
           var cb = combo;
           if(newTEDetailRecord) {
              if(newTEDetailRecord.data["activityKey"] == "") {
                 console.log("newTEDetailRecord", newTEDetailRecord);
                 cb.setEditable(true);
                 cb.setReadOnly(false);
                 cb.focus();
                 cb.selectText();
              } else {
                 cb.setReadOnly(true);
              }
           }
        },