2009-07-29 55 views
3

我在Ext JS 3.0中有一個EditorGridPanel,通過HttpProxy和JsonReader填充,我有一個可編輯的列「working」 - 我可以編輯該值並將其標記爲髒。在ExtJS 3.0中通過EditorGridPanel的XmlHttpRequest自動保存?

現在,如何獲得它,在一個單元格被編輯後,發送一個XmlHttpRequest到具有幾個基本參數的服務器,行的ID字段,列的名稱改變,以及新的值?

一旦請求完成,服務器端更新很容易。但是沒有任何Google和挖掘內存中的微不足道的EditGridPanel示例有助於讓EditGridPanel進行調用。

我不是在尋找的東西:

  1. REST - 只是通過正常的GET或POST
  2. 插入新記錄更新或刪除行 - 現在只更新。
  3. 批量更新 - 一次只編輯一個單元格。
  4. 一串代碼 - 這應該是微不足道的,就像在有Ajax.InPlaceEditor Scriptaculous的

回答

2

我終於找到它了...只是需要一個作家對我的店鋪:

var ds = new Ext.data.JsonStore({ 
    autoSave:  true, 
    url:   "ajax-handler.aspx", 
    method:   "POST", 
    timeout:  120000, 
    root:   "rows", 
    totalProperty: "results", 
    idProperty:  "primarykeyvalue", 
    fields:   previewColumnConfig, 
    baseParams:  { 
     now:  (new Date()).getTime() 
     }, 
    writer: new Ext.data.JsonWriter({ 
     encode:  true, 
     listful: false 
     }) 
    }); 

注:

  • 「現在」 baseparam是爲了避開「某些瀏覽器」(以猜測)緩存AJAX結果
  • 「encode」返回POST變量,而不僅僅是POST中的裸JSON結果。
  • 「listful」被禁用,因爲用戶一次只編輯一行/一列,不需要設計服務器端分析器來引入數組,它只能預期一行。
  • 是的,我有一個真的很長超時值。
  • previewColumnConfig是事先定義的,用於存儲我的列定義。
0

你可以使用Ext.grid.EditorGridPanel的afteredit事件後的編輯是模糊的,這將觸發。您還可以在beforeedit事件觸發時設置定期(間隔)檢查方法,並在發生事件後觸發清除事件。

舉例afteredit:

EditorGridPanel.getColumnModel().getCellEditor(column).on('afteredit', function() { 
    //do ajax call for the update. 
}); 

讓我知道,如果你需要定期檢查的例子,我會寫一個。

+0

這是我正在看的選項,但有些東西感覺不對。也許我會給ExtJS的人們太多的功勞,但是如果沒有一種直接的方式告訴網格將請求本身發送到某個指定的URL,並使用服務器的ACK/NAK響應來清除,我會感到驚訝骯髒的旗幟。有一個「自動保存」配置選項,但我似乎無法做任何其他需要爲我做的工作。 – richardtallent 2009-07-29 21:44:17