easyUI中的datagrid、treegrid編輯了數據,可以用getChanges命令來獲取更新情況。按道理,有"inserted"、"updated"、"deleted"三種類型,增改刪嘛,但不知為何,"inserted"我從來沒有獲取到過。
deleted比較沒有問題,只要有remove,就可以獲取;
updated的話,有修改也可以。
對於inserted,有個變通的辦法是,新增的時候,選中新增行,然后beginEdit,再endEdit;這樣該行即可進入updated矣。有一個問題要注意:datagrid、treegrid(其實treegrid繼承自datagrid)每行會有個主鍵,比如id,用於識別行。那么我們只要在新增行的時候,將此id賦一個唯一值,再乘以-1,提交到后台,就可知該行是insert而不是update,從而不會與其他update行混淆。
還有一個注意的問題,就是這些新增行的數據不能齊全,要至少有一個字段沒有值,這樣才能進入到update里,真奇怪。
function InsertItem(nodes,groupAId, node) {
var _id = getUtc() * -1;
var _data = {
'id': _id
, 'name': node.text
//, 'seq': 0 //空出一個值不賦,這樣才能進入update。原因不明
, 'isValid': true
, 'pId': node.pId
, 'itemId': node.itemId
, 'isGroup': false
};
_grid.treegrid('append', {
parent: groupAId,
data: [_data]
});
_grid.treegrid('select', _data.id);
_grid.treegrid('beginEdit', _data.id);
_grid.treegrid('endEdit', _data.id);
return _id;
}
通常我們用數據庫的主鍵id來做datagrid的主鍵,其實可以分開來,多設一個字段給easyUI,比如設一個eid,用eid來做datagrid的行主鍵;從后台過來的時候,eid == id。而新增的時候,新增行的eid被賦予唯一值,而id則不賦值。這樣的好處是
1)有可能在getChanges的時候,可以獲取到inserted;
2)不用將 id 賦予一個負值這么折騰
但不想專門去試這個東西。不值得。
