>①以下のコードで「xコース仕分」の追加・編集をなさっていると思いますが、解読ができなくて、ご説明して頂けたら幸いです。
これだけ説明します。作るより説明のほうが時間がかかります。
設定内容
...
courseInfo: {
'aコース': 'aコース料金', 'bコース': 'bコース料金', 'cコース': 'cコース料金',
'xコース': { 'xコース仕分': { '法人': '法人料金', '個人': '個人料金' } }
}
...
courseInfo: {
'dコース': 'dコース料金', 'eコース': 'eコース料金', 'fコース': 'fコース料金',
'その他': ['その他aa', 'その他bb']
}
courseInfo に、設定している内容に、下記の3種類があります。
・ シンプルな表示制御
‘aコース’: ‘aコース料金’
コース項目の値(兼フィールドコード) : コース料金のフィールドコード
・ 複数のコース項目を表示制御
‘その他’: [‘その他aa’, ‘その他bb’]
コース項目の値(兼フィールドコード) : コース料金のフィールドコードの配列構造
・ 階層がある表示制御
‘xコース’: { ‘xコース仕分’: { ‘法人’: ‘法人料金’, ‘個人’: ‘個人料金’ } }
コース項目の値(兼フィールドコード) : コース仕分けの情報
コース仕分けの情報(courseInfoと同じ構造)
‘xコース仕分’: { ‘法人’: ‘法人料金’, ‘個人’: ‘個人料金’ }
コース仕分のフィールドコード: コース仕分けについての情報(オブジェクト)
3種類なので、JSON の設定方法で識別出来るようにしています。
表示制御の種類が4種類以上ある場合は、構造を見直して種類が識別できる情報を付加することになります。
上記のcourseInfoを使って、変更イベントに必要なフィールドを抽出します。
この処理での、対象項目は、階層構造になっているコース仕分けの情報です。
Object.keys(planData.courseInfo).forEach(function(courseDetailObject) {
var detailObject = planData.courseInfo[courseDetailObject];
if (typeof detailObject === 'object' && !Array.isArray(detailObject)) {
Object.keys(detailObject).forEach(function(courseDetailFieldCode) {
events.push('app.record.create.change.' + courseDetailFieldCode);
events.push('app.record.edit.change.' + courseDetailFieldCode);
})
}
});
たぶん、分かりにくいところは、ここだと思います。
if (typeof detailObject === ‘object’ && !Array.isArray(detailObject)) {
{ ‘法人’: ‘法人料金’, ‘個人’: ‘個人料金’ } を抽出するために、オブジェクトで、かつ配列で無いものという判定です。
配列は、オブジェクトの1種類ですので、除外しています。
typeof と Array.isArray については、検索して調べてください。