コントローラからDOMに渡されたオブジェクトからselectのオプションを動的に作成しようとしています。オプションの一部として、これらのオブジェクトのプロパティをデータ値として渡す必要があります。私は選択罰金を構築することができますが、dataset.valueを正しく構築することはできません。現在、私のコードはこれです:JavaScriptの実際のオブジェクトではなく、[オブジェクトオブジェクト]を返すdataset.value
select.name = "indicator_id_option_" + count;
select.id = "indicator_" + count;
select.setAttribute("onchange", "if (typeof(this.selectedIndex) != '--'){ addNewSelect(this)}");
indicators.forEach(function(indicator){
var optionToAppend = document.createElement('option');
optionToAppend.text = indicator.pk;
var dataVal = {"id": indicator.pk, "timePeriod": indicator.fields.time_period};
optionToAppend.dataset.value = Object.assign({}, dataVal);
console.log(optionToAppend.dataset.value);
select.appendChild(optionToAppend);
});
Indicators
は私が罰金を反復処理できるオブジェクトのオブジェクトであり、問題なくのプロパティを呼び出すことができます。オプションをビルドすると、オプションテキストが正しく表示されますが(indicator.pk
)、データ値は[object Object]
と表示されます。 console.log
がdataset.value
になると、ログがJSON.stringify(dataset.value)
になると[object Object]
となり、"[object Object]"
が得られます。私がdataVal
をログアウトすると、私は実際のオブジェクトを得ることができます - Object {id: 92235, timePeriod: "annual"}
のプロパティにアクセスできます。私は直接割り当てを試みました - optionToAppend.dataset.value = dataVal
- 上記のオプションと何もオブジェクトを正しく作成していません。どんな指導?
>どれ指導:
あなたはJSONのオブジェクトを文字列に変換し
JSON.stringify()
を使用することによってこの問題を解決することができますか? DOMプロパティには、型や値を変換するための多くのゲッター/セッター関数があります。現在のケースでは、 'value'は' dataset'オブジェクトの設計によって文字列に強制されます。 DOMモデルでは、カスタムタグをオブジェクトに追加できます。フリーズしていないため、自然オブジェクトでターゲットプロパティを簡単に追加できます。 –'optionToAppend.dataset.value = JSON.stringify(dataVal);'? –
@JohanKarlsson - これはうまくいきました!ありがとうございました! – RustyBrain