2017-03-17 5 views
0

を受け入れるために、既存のコード以下の問題の説明のために以下のコードを参照してくださいを修正します:は、複数のパラメータ

app_.populateCodeList("First Attribute", self.selectors.add_attribute_dialog + " .attribute-name"); 

すべて動作します。しかし、私は2番目の属性で、このような上記の関数を呼び出すようにしようとすると、次のようにカンマで を分離:

app_.populateCodeList("First Attribute,Second Attribute", self.selectors.add_attribute_dialog + " .attribute-name"); 

私は上記のコードでif (!pt) { return self.displayError("Invalid PT: " + ptName_, "populateCodeList"); }

この行の結果である次のエラー Invalid PT:First Attribute,Second Attribute in populateCodeListを取得します

Soは基本的に私のコードは、行に示されているコンマが、単一の変数で区切られた2つのパラメータを処理するようにプログラムされていない

var pt = self.registry.pt[ptName_];

上記の行は、必要に応じてシングルまたはダブルのパラメータを受け入れることができますか?

ありがとうございます。

答えて

1

デリミタに分割したり、関数コンシューマが配列を渡すことができます。最初の提案の例を次に示します。

this.populateCodeList = function (ptName_, listSelector_) { 

    if (!ptName_) { return self.displayError("Invalid pt name", "populatecodeList"); } 
    if (!listSelector_) { return self.displayError("Invalid list selector", "populatecodeList"); } 

    var ptNames = ptName_.split(','); 
    // if empty, nothing was passed 
    if (!ptNames.length) { return self.displayError("No pt names supplied"); } 
    // iterate over all matches 
    var html = ""; 

    ptNames.forEach(function(ptName) { 
     var pt = self.registry.pt[ptName]; 
     if (!pt) { return self.displayError("Invalid PT: " + ptName, "populateCodeList"); } 

     $_.each(pt.codes, function (index_, code) { 

      if (!code || !code.id || !code.name) { return self.displayError("Invalid code at index " + index_, "populateCodeList"); } 

      html += "<option value='" + code.id + "'>" + code.name + "</option>"; 
     }); 

    }); 

    $_(listSelector_).html(html); 
}; 
+0

ありがとう:私もそれがより良い機能ではなく、セレクタに(私は仮定)jQueryの要素、すなわちを渡すために見つける

app_.populateCodeList(["First Attribute","Second Attribute"], self.selectors.add_attribute_dialog + " .attribute-name"); 

。この 'app_.populateCodeList("最初の属性、2番目の属性 "、self.selectors.add_attribute_dialog +" .attribute-name ")のように、私はそれを呼び出す間に何のエラーも見ません。 '変更を使用した後、' First Attribute'パラメータに関連する情報が表示されています。この 'app_.populateCodeList("第2の属性、第1の属性 "、self.selectors.add_attribute_dialog +"属性名 ")のようにします。 '2番目の属性のみに関連する情報が表示されていますが、両方ではありません。なぜそれが最初のパラメータだけを取り上げるのか、両方ではないのか分かりますか? – Tan

+0

私の悪い、コードを更新しました。 '$ _(listSelector _)。html(html);'をループ外に移動する必要がありました。そうしないと、最後の反復ですべてのhtmlが最後の反復で生成されたhtmlに置き換えられます。 –

+0

ありがとうございます。ループ外に移動するとすぐに、ブラウザコンソールに「Uncaught ReferenceError:html is not defined」エラーが表示されます。 – Tan

0

次に、配列を渡す方法を示します。

this.populateCodeList = function (ptNames_, listSelector_) { 

    if (!ptNames_) { return self.displayError("Invalid pt name", "populatecodeList"); } 
    if (!ptNames_.length) { return self.displayError("Invalid pt name", "populatecodeList"); } 

    if (!listSelector_) { return self.displayError("Invalid list selector", "populatecodeList"); } 

    var html = ""; 

    $_.each(ptNames_, function (ptName_) { 

     var pt = self.registry.pt[ptName_]; 

     if (!pt) { return self.displayError("Invalid PT: " + ptName_, "populateCodeList"); } 

     $_.each(pt.codes, function (index_, code) { 

      if (!code || !code.id || !code.name) { return self.displayError("Invalid code at index " + index_, "populateCodeList"); } 

      html += "<option value='" + code.id + "'>" + code.name + "</option>"; 
     }); 

    $_(listSelector_).html(html); 
}; 

としてそれを呼び出す:

this.populateCodeList = function (ptNames_, $list_) { 
    ... 
    $list_.html(html); 
} 

app_.populateCodeList(["First Attribute","Second Attribute"], 
         $_(self.selectors.add_attribute_dialog + " .attribute-name")); 
+0

ありがとうございます。何らかの理由で、この行にエラーが発生します。if(!pt){return self.displayError( "無効なPT:" + ptName_、 "populateCodeList"); } 'それは、' Invalid PT:0 in populateCodeList'です。 – Tan

+0

実用的なコードなしでは難しいです。 jsfiddleを作成してみてください。また、変数が期待どおりであることを確認するためにいくつかの 'console.log'ステートメントを追加します。 –