2016-12-07 10 views
1

私はいくつかのリファクタリングを行い、与えられたドロップダウンにオブジェクトデータを取り込めるジェネリックメソッドを作成しようとしています。しかし、私は別のオブジェクトデータを一般的にアクセスする方法に関する問題に対処しています。たとえば、次のようにジェネリックメソッドでオブジェクト値にアクセスする

オリジナルメソッド

function populateDropdown(element, data) { 
for (var i = 0; i < data.length; i++) 
    element.append('<option value=' + data[i].ID + '>' + data[i].Name + '</option>'); 
} 

オブジェクトの指定された配列は、フィールドIDNameを持っている場合、これは動作します。 populateDropdown($('#myDropdown'), dataArray, "ID", "DataType");

そして、ときに私が"" Iなしで試してみた:私は、結果としてUndefinedを取得し、このように、このメソッドを呼び出して試してみたときに私は何を達成しようとしていることは、この

function populateDropdown(element, data, valueField, dataField) { 
for (var i = 0; i < data.length; i++) 
    element.append('<option value=' + data[i].valueField + '>' + data[i].dataField + '</option>'); 
} 

のようなものですIDDataTypeが定義されていないというコンソールエラーが表示されます。オブジェクトから私が望むフィールドを自分のメソッドに伝える方法はありますか?

答えて

2

使用bracket notation -

function populateDropdown(element, data, valueField, dataField) { 
    for (var i = 0; i < data.length; i++) 
     element.append('<option value=' + data[i][valueField] + '>' + data[i][dataField] + '</option>'); 
} 

注 - プロパティ値の特殊文字に、これはもう少し弾力的にするために、私が代わりにこれを行うだろう:

$('<option />', { value : data[i][valueField] }).text(data[i][dataField]).appendTo(element); 
+0

は非常に働いていますジェイソンありがとうございます!偉大な答えがたくさんありますが、最初に投稿したので、答えられた投票は時間が許せばあなたに行きます:) – Novastorm

0

あなたはdata[i][valueField]data[i][dataField]を行うことができます:

function populateDropdown(element, data, valueField, dataField) { 
for (var i = 0; i < data.length; i++) 
    element.append('<option value=' + data[i][valueField] + '>' + data[i][dataField] + '</option>'); 
} 
0

使用bracket notation[]は、プロパティにアクセスするには:

function populateDropdown(element, data, valueField, dataField) { 
    for (var i = 0; i < data.length; i++) 
     element.append('<option value=' + data[i][valueField] + '>' + data[i][dataField] + '</option>'); 
} 
0

他の人が言ったこと、...これがそうのようにあなたがそれらを通過しない場合だけFYIあなたはまた、デフォルト値を定義することができ、有用であるかどうかわからない

function populateDropdown(element, data, valueField, dataField) { 
    valueField = valueField || 'some_default_value'; 
    dataField = dataField || 'some_default_value'; 

    for (var i = 0; i < data.length; i++) 
     element.append('<option value=' + data[i][valueField] + '>' + data[i][dataField] + '</option>'); 
} 

は、その後、あなたはvalueFieldとデータフィールドのparamsアウトを残して、このようにそれを呼び出すことができます。

populateDropdown('someElement', 'someValue'); 
関連する問題