ExtJS 4 に複雑なフォームがあり、ユーザーがフォーム フィールドから選択した内容に基づいて、フォームのさまざまな部分が動的に有効または無効になります。フォーム フィールドを無効にするときはいつでも、現在そこにある値もクリアします。
フォームを表すモデル クラスがあります。フォームをロードするには、 を使用しますform.loadRecord(model)
。ユーザーがフォームを「送信」したときにモデルを更新するには、 を使用しますmodel.set(form.getValues())
。
問題は、ext のgetValues()
実装が無効になっているフォーム フィールドをスキップすることです。値が変更されたフォームフィールドの一部が無効になっているため、これは私の場合に問題を引き起こします(つまり、無効にしたときに値をクリアしたフォームフィールド)。その結果、 を呼び出しても、これらのフィールドはモデルで更新 (クリア) されませんmodel.set(...)
。
この問題を回避する最善の方法は何でしょうか? 次のアイデアを検討しましたが、どれもあまり良いとは思えません。もっといいのがあれば、聞きたいです。
- を呼び出す前に、モデルをクリアします (すべてのフィールドを未定義に設定します)
model.setValues()
。残念ながら、model.clear()
メソッドがないため、これはすぐに見苦しくなります。すべてのフィールドを取得し、それらを反復処理して、それぞれを個別にクリアする必要があります。 - フォームフィールドを無効にしてクリアすると、モデルフィールドもクリアされます。これは、関心の分離に違反しているように見えます。また、ユーザーがキャンセルしてフォームを送信しないことを選択した場合でも、モデルが変更されることを意味します。
- ext の実装をオーバーライド
form.getValues()
して、無効なフィールドをスキップしないようにします。Ext.form.field.Field
変更が必要な実際のコードはではなくクラスにあるため、これはさらに厄介ですExt.form.Basic
。