2013-02-25 42 views
3

我有一個網格:ExtJS的編輯網格單元僅是新

Ext.create('Ext.grid.Panel', { 
    id: 'grid', 
    store: this.store, 
    columns: [{ 
     dataIndex: 'a' 
    },{ 
     dataIndex: 'b' 
    },{ 
     dataIndex: 'c' 
    }], 
    selModel: { 
     selType: 'cellmodel' 
    }, 
    plugins: [cellEditing] 
}) 

其中採用cellEditting:

var cellEditing = Ext.create('Ext.grid.plugin.CellEditing', { 
    clicksToEdit: 1, 
    listeners: { 
     beforeedit: function(obj) { 
       // Something goes here? 
     } 
    } 
}); 

現在,有按鈕「添加行」給電網,因此記錄可能是新的或舊的。

  • 在一個行被添加到存儲/面板的情況下,我需要列bc可編輯。
  • 如果用戶正在嘗試編輯現有的行,該行在創建面板時從數據庫中簡單加載,那麼我只需要列c即可編輯。

我懷疑我需要在beforeedit監聽器中添加一些東西,但我是新來的ExtJS和JavaScript的一般,所以我不知道如何描述條件。

回答

5

你絕對是在正確的軌道上。 'beforeedit'事件允許您通過返回false來阻止編輯操作。如果您查看它的文檔,你可以看到你收到的對象,它提供所有有關的細胞所需要的信息:http://docs.sencha.com/ext-js/4-1/#!/api/Ext.grid.plugin.CellEditing-event-beforeedit

var cellEditing = Ext.create('Ext.grid.plugin.CellEditing', { 
    clicksToEdit: 1, 
    listeners: { 
     beforeedit: function(editor, event, opts) { 
      if (!event.record.phantom && event.column.dataIndex == 'columnC') { 
       return false; 
      } 
     } 
    } 
}); 

幻象是保持知道一個記錄是否是新創建的記錄屬性(不尚未同步到服務器),或者最初與商店中的所有其他人一起加載。

+0

我最終做了類似的事情。我在模型中添加了一個字段,該字段僅在插入項目時設置。我認爲這可能是更好的方法,因爲我有更多的控制何時設置/未設置。 – mvd 2013-02-25 23:59:32

+0

非常好,謝謝! – Emmanuel 2014-03-12 14:14:13

相關問題