2017-03-08 136 views
1

我使用ExtJS 5.1.3,我有一個網格,從一個商店有一個模型加載。網格被設置爲使用插件roweditor,所以我編輯一個單元格,並給它一個新的值,此時紅色的勾號顯示單元格已被更改。ExtJS網格roweditor仍然骯髒後網格保存和存儲重裝

我點擊它時,保存按鈕獲取store.getModifiedRecords(),並把這些開了一個Ajax請求,在此請求的成功的幾件事情發生,最後的動作我做的是重新加載網格店然後再用最新版本的數據填充網格,這很好,似乎按預期工作。

由於這是一個多頁面應用程序,當用戶離開這個頁面時,我也有一個檢查,這是爲了捕獲任何未保存的網格更改,所以基本上我從頁面獲取任何表單並驗證isDirty()值,這是我找到我的問題,roweditor被返回爲髒,這是因爲一些列有一個編輯器和ExtJS使用這些字段的表單驗證,

我不明白爲什麼商店再次加載沒有清除與網格列關聯的任何髒字段?我已經嘗試了許多事情,比如在ajax請求之前清理商店以及刷新網格視圖,我嘗試在做ajax請求之前提交商店更改,但每次嘗試從格保存我拿起roweditor具有骯髒的領域:(任何幫助是極大的讚賞

編輯:設法複製一個簡單的小提琴

https://fiddle.sencha.com/#view/editor&fiddle/1rmf

小提琴是基本的,複製遵循以下步驟;

  • 編輯第一行時代,改變年齡13
  • 單擊Save(我迫使商店加載已經改變,我們已經取得了數據)點擊
  • 「檢查roweditor髒()值」按鈕查看roweditor的值是dirty()函數,這將返回true

如果你看看按鈕處理程序,你可以鑽入到表單[0] .items.items [2]中並且看到這個字段有髒:true這就是爲什麼isDirty()返回true。在我的情況

SOLUTION

如接受的答案解釋的,roweditor不受商店編輯/取消或負載。我點擊「保存」時所做的就是獲取網格,然後編輯器和它的形式,並在此上調用reset(),以便再次有效地同步所有內容。

grid.editingPlugin.getEditor().form.reset(); 
它返回一個arrary

更新小提琴

你也可以通過grid.getPlugins訪問插件()來顯示它的工作

https://fiddle.sencha.com/#view/editor&fiddle/1rmr

+2

請一個示例的[煎茶小提琴]的形式(http://fiddle.sencha.com),否則我們不知道究竟你正在嘗試做的。 – Alexander

+0

有一個小提琴更新:) – user2751034

+0

http://docs.sencha.com/extjs/5.1.2/api/Ext.form.Basic.html#cfg-trackResetOnLoad我確實有一些想法可能的,這可能有東西用它做 – user2751034

回答

2

在編輯過程中grid最終將調用loadRecordeditorform。但編輯成功或取消時編輯器的表單不會被清除。這就是爲什麼你檢查骯髒返回false。 網格重新加載數據不會破壞編輯器。這是一個優化。編輯器只創建一次,並隨網格一起銷燬。

+0

這是有道理的,所以我需要一種方式來'重置'編輯器表單,只要用戶點擊'保存'。我已經通過我的應用程序控制臺,在那裏我切換頁面我叫editor.form.reset(之前編輯記錄和保存,然後測試該手動)和導航離開,現在我沒有看到編輯任何警告關於未保存的更改,我應該有足夠的知識,現在這個適用於我的應用程序代碼,我會更新一次添加,謝謝:) – user2751034

+0

能夠根據您的意見neccessary變化,已經更新的問題,以顯示我的解決方案。非常感謝您的幫助:) – user2751034

0

我會盡力回答有關藉助全部ExtJS桌面應用程序體驗我的體驗。

順便看一下您的描述,您可能需要調用Store.sync()方法刷新商店。

尋找更深刻,有許多方法,使CRUD使用ExtJS的。

我已經使用商店的「實例」,但在某些時候,我不得不將其更改爲像MyApp.store.Model.save()等靜態調用。這使得你只有一個商店的實例避免髒數據。

這裏是我的項目文件夾,如果你需要

https://github.com/guilhermeribeirodev/grizzlyboilerplate/tree/master/src/main/webapp/js/MyApp

+0

感謝您的評論:) – user2751034