2017-03-08 14 views
1

私はExtJS 5.1.3を使用していますが、モデルを持つストアからロードされたグリッドがあります。グリッドはプラグインのroweditorを使用するように設定されているので、セルを編集して新しい値を与えます。この時点で、セルが変更されたことを示す赤いチェックが表示されます。グリッドの保存とストアのリロード後にExtJSグリッドローダードーターがまだ汚れている

私はクリックしたときにstore.getModifiedRecords()を取得し、これをAjaxリクエストに渡す「保存」ボタンを持っています。このリクエストが成功すると、いくつかのことが起こり、最後にグリッド・ストアをロードしますグリッドにデータの最新バージョンを再投入すると、これは問題なく、期待どおりに動作しているようです。

これはマルチページアプリケーションであるため、ユーザーがこのページから移動したときのチェックがあります。これは保存されていないグリッドの変更をキャッチするためのもので、基本的にページからフォームを取得してisDirtyこれは私が問題を見つけているところです。行エディタが汚れていると返されています。これはエディタがあり、ExtJSがフォーム検証を使用しているためです。

ストアの読み込みがなぜグリッド列に関連付けられた汚れたフィールドをクリアしませんか?私はAjaxリクエストの前にストアをクリアし、グリッドビューをリフレッシュするなど、Ajaxリクエストを行う前にストアの変更をコミットしようとしましたが、 。簡単なフィドル

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

に複製するために管理フィドルはこれらに続く複製する、基本的なものです:私は汚れたフィールドを持つものとしてroweditorを拾う:(任意のヘルプは大歓迎です

編集、保存グリッドステップ;

  • 編集最初の行の年齢、13に変更し、年齢
  • 確認するには、ボタンを
  • クリック「)(roweditorが汚れている値を確認してください」(私は変更私たちが作ってきたたデータをロードするために店を強制しています)、[保存]をクリックしますroweditor isDirty()関数の値。これはtrueを返します。

ボタンハンドラを見ると、フォーム[0] .items.items [2]にドリルしてこのフィールドが汚れていることがわかりますisDirty()がtrueを返す理由です。

としては受け入れ答えで説明

溶液は、roweditorは/私の場合はキャンセルまたはロードストア編集の影響を受けません。私が「保存」をクリックしたときに行ったことは、グリッドを取得してからエディタとフォームを作成し、reset()を呼び出すことで効果的にすべてを同期させることでした。

grid.editingPlugin.getEditor().form.reset(); 

あなたも(grid.getPlugins経由でプラグインへのアクセスを得ることができます)

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

+2

[Sencha fiddle](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

が必要な場合は、最終的editorformloadRecordを呼び出しますです。しかし、エディタのフォームは、編集やキャンセルの際にクリアされません。だからこそ汚れチェックが偽を返すのです。 データを再読み込みしても、エディタが破壊されるわけではありません。それは最適化です。編集者は一度だけ作成され、グリッドと一緒に破壊されます。

+0

これは意味があるので、ユーザーが「保存」をクリックするたびにエディタフォームを「リセット」する必要があります。私は手動で私のアプリケーションのコンソールでこれをテストしました。ここで私はレコードを編集して保存しました。そして、ページを切り替える前にeditor.form.reset()を呼び出してナビゲートしました。エディタからの警告は表示されません保存されていない変更については、アプリケーションコードにこれを適用するには十分な知識が必要です。一度追加していただきありがとうございます:) – user2751034

+0

はあなたのコメントに基づいて必要な変更を行うことができました。あなたのために多くのおかげで:) – user2751034

0

作業、それを示すために

arrary

更新フィドルを返す私はについてお答えしようとするでしょうすべてのExtJSデスクトップアプリケーションでの私の経験に。

説明をすばやく見れば、ストアを更新するStore.sync()メソッドを呼び出す必要があります。

もっと深く見ると、ExtJを使用してCRUDを作成する方法はたくさんあります。

私はストアの「インスタンス」を使用して作成されていますが、特定の時点で、そのインスタンスをMyApp.store.Model.save()などの静的呼び出しに変更する必要がありました。そのため、ストアのインスタンスは1つしかありません汚れたデータを避ける。

ここに私のプロジェクトのフォルダには、編集プロセスgrid中に

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

+0

コメントありがとう:) – user2751034

関連する問題