2017-05-30 24 views
1

我嘗試實現一個像this example一般的rowediting網格,區別在於我希望將更改與服務器後端同步。到現在爲止,我可以添加一個新的行onRoweditAdd帶同步的rowedit網格

Ext.define('Mb.view.base.RoweditListController', { 
    extend: 'Ext.app.ViewController', 
    alias: 'controller.roweditlist', 
    onRoweditAdd: function(me){ 
     var grid = me.up('panel'), 
      edit = grid.editingPlugin, 
      store = grid.getStore(), 
      record = store.getModel().create({id: 0}); 
     edit.cancelEdit() 
     store.insert(0, record) 
     edit.startEdit(record, 0) 
    }, 
    editRowedit: function(editor, ctx) { 
     var store = ctx.grid.getStore(); 
     store.sync() 
    } 
}) 

的問題是,store.sync()不發送create請求到服務器,而是一個update請求。它看起來像store.insert(0, record)沒有考慮。只有用戶完成的修改纔會同步。可能是什麼罪魁禍首?

+0

我試圖重現,但是,[我的情況下,只有創建被稱爲,從不更新。奇怪。](https://fiddle.sencha.com/#view/editor&fiddle/20j3) – Alexander

+0

即使我已經嘗試過,不能重現它,請分享小提琴,如果可能的話。 –

+0

@Alexander我找到了解決辦法,看看我的答案。如果你明白爲什麼不允許創建一個ID爲0的記錄,把它作爲你的答案,我會接受它。 –

回答

4

通過給記錄中的現有id,ExtJS假定此記錄已存在於您的商店中並且必須更新。如果你不給一個id,那麼它就會認爲它是一個新創建的記錄,並且會去創建路徑。這來自您使用生成的ID策略(您通常應該這樣做)的假設,因此您在創建時不會自己提供ID。

在引擎蓋下,ExtJS將記錄標記爲幻影:true或false。幻影記錄是僅存在於前端並且尚未被保存的記錄。沒有id創建一個記錄將其標記爲幻影,而創建已提供不其標記爲幻影的ID記錄,並不會觸發建立呼叫,但一個更新,而不是

+0

謝謝你的解釋。這與ExtJs 4有所不同,其中'id == 0'表示*新記錄* –

1

不幸的是,我無法創建一個重現問題的小提琴。

我解決它通過改變這一行:

record = store.getModel().create({id: 0}); 

record = store.getModel().create({}); 

的問題有,因爲ExtJS的5做的新的執行記錄ID的東西,但是我無法解釋...

ExtJs 6不再支持創建id: 0的新記錄。

1

我發現,在Ext.data.ModelidProperty作爲識別記錄的唯一鍵。默認情況下它有id字段集。如果您提供它重複,那麼它將在store中引起問題。

這說明已經寫在ExtJS的文檔

The data values for this field must be unique or there will be id value collisions in the Ext.data.Store. 
Defaults to: 
'id' 

請參閱link