以下の2つを同時に実現したいです。
➀レコード複写時(create.showイベント)にコピー先のいくつかのフィールドを編集またはクリアしたい。
➁changeイベントで上記クリア対象のひとつであるフィールド(日時)が変更された場合、
その値から算出した日時を別の日時フィールド設定したい。
それぞれ別ファイルのJSに記載されているコードを引き継いだのですが
上手く動作していません。create.showで表示されたフィールドに値が中途半端に残っています。
実行順がchageイベント→create.showなのでしょうか。
changeイベントで引き渡されるレコードの内容を見ると、create.showで値を変更している
フィールドもあるのですが、日時はコピー元の値が入ったままになっています。ここが
クリアされていれば、changeイベントで判定を追加し逃げれるのかなと思ったのですが。
アドバイスをいただけると助かります。
4件のコメント
実際のコードを見てみないと何とも言えませんが、
①は以下の様に「event.reuse」で再利用であれば「true」そうでなければ「false」を返します。
「true」の時に処理をするというように記述できます。
②に関してですがchangeイベントを使用しないといけないのでしょうか?
①処理の後にフィールド情報を取得し、別フィールドに反映する流れで良いように感じます。
想像する処理とかけ離れていたら申し訳ないですが、以下のような処理でしょうか?
コメントありがとうございます。
実現したいことがうまく説明できていないにも関わらず、お時間いただき申し訳ございません。
まずは複写時の部分になります。複写時にフィールドをクリアしています。
次にフィールド変更時です。日時フィールドaを変更した際、日時フィールドbにaの2時間後を設定します。
ソースはもっと長いのですが、割愛しております。
上記がそれぞれ別JSファイルに記載されてアプリ適用されております。
実行すると複写イベント時にフィールドaにコピー元の値が残ってしまいます。
複写と同時にchangeイベントが動作しているように見えます。
changeイベントの中で既にフィールドaがクリアされていればいいのですが、デバックモードで値を
見ると、コピー元の日時が残っており、うまくcreate.showの処理をかみ合っていません。
検証してみましたがクリアされない現象にはなりませんでした。
そのためエラーの原因はわかりませんが、検証した際のコードを添付しておきます。
私が書きやすいように整形してしまっています。ご了承ください。
また、使用されているmomentですが現在非推奨となっています。luxonをお使いいただいた方がよいかと思います。
問題解決の参考になれば幸いです。
検証までしていただき、ありがとうございます。
数年前のソースを引き継いだので、現状に合わない部分も多そうです。
いただきましたソースを参考に再度検証したいと思います。