2017-07-20 6 views
1

コントローラから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.logdataset.valueになると、ログがJSON.stringify(dataset.value)になると[object Object]となり、"[object Object]"が得られます。私がdataValをログアウトすると、私は実際のオブジェクトを得ることができます - Object {id: 92235, timePeriod: "annual"}のプロパティにアクセスできます。私は直接割り当てを試みました - optionToAppend.dataset.value = dataVal - 上記のオプションと何もオブジェクトを正しく作成していません。どんな指導?

+0

>どれ指導:

あなたはJSONのオブジェクトを文字列に変換しJSON.stringify()を使用することによってこの問題を解決することができますか? DOMプロパティには、型や値を変換するための多くのゲッター/セッター関数があります。現在のケースでは、 'value'は' dataset'オブジェクトの設計によって文字列に強制されます。 DOMモデルでは、カスタムタグをオブジェクトに追加できます。フリーズしていないため、自然オブジェクトでターゲットプロパティを簡単に追加できます。 –

+1

'optionToAppend.dataset.value = JSON.stringify(dataVal);'? –

+0

@JohanKarlsson - これはうまくいきました!ありがとうございました! – RustyBrain

答えて

1

optionToAppend.dataset.valueに設定すると、暗黙的にオブジェクトを文字列に変換するときに問題が発生します。

optionToAppend.dataset.value = JSON.stringify(dataVal); 
関連する問題