1

Pazによる優れた回答により、今週はオートコンプリートのjQueryUIディールの大まかなパッチが適用されました。

つまり、json応答に2つの異なる「ベース」オブジェクトがある場合、どのようにして正しいjson応答を選択するのでしょうか。

簡単に言えば、PitchとUserの2つのモデルで構成されるrubyインスタンス変数があります。このインスタンス変数に基づいてオートコンプリートしたいと思います。jsonの応答は、次のようになります

[{"user":{"id":1,"name":"Blah Hugo"}},
{"user":{"id":3,"name":"Blaz Foobar"}},
{"pitch":{"id":2,"name":"Blasters On Business Apparel"}}]

オートコンプリートJavaScriptファイルは現在次のようになっており、<スニペットのみ>で機能します。

.data( "autocomplete" )._renderItem = function( ul, item ) {
  return jQuery( "<li></li>" )
  .data( "item.autocomplete", item )
  .append( "<a>" + (item.user ? item.user.name : item.pitch.name) + "</a>" )
  .appendTo( ul );
};

繰り返しますが、私の問題は、私が使用しなければならなかったこの三元です。 どちらの名前もわからない場合、一般的な「user」または「pitch」を取得する方法はありませんかitem[0].nameitem.item[0].name

そのうちの1つはそうするでしょう。何て言うの?

4

2 に答える 2

3

私はあなたが持っているものにそれほど悪いことはないと思いますが、おそらくわずかな改善は次のようになります:

.data("autocomplete")._renderItem = function(ul, item) {
    item = item.user || item.pitch;

    return jQuery("<li></li>")
        .data("item.autocomplete", item)
        .append("<a>" + item.name + "</a>")
        .appendTo(ul);
};
于 2012-04-27T19:10:54.267 に答える
1

||(論理OR)を使用して、.append()メソッド内の三項演算子を簡単に並べ替えることができます。

これはあなたが望むことをしますか?

.data( "autocomplete" )._renderItem = function( ul, item ) {
    item = item.user || item.pitch || {name:""};
    .append( "<a>" + item.name + "</a>" )
    return jQuery( "<li></li>" )
    .data( "item.autocomplete", item )
    .append( "<a>" + item.name  + "</a>" )
    .appendTo( ul );
};

これにより、引数のリストの最初の「false以外」の値が返されます。この場合item.user.nameitem.pitch.name。この場合、JSONオブジェクトにuserプロパティがあると、name値が返されます。JSONオブジェクトにpitchプロパティがある場合、name値が返されます。これらの操作の両方が返される場合、空白の文字列が返され、タグundefinedに追加されます。a

この回答は、「OR」メソッドを使用して使用するときに心に留めておくべき使用法と特殊なケースに関する詳細情報を提供します。

更新null:例外の可能性を修正しました。

于 2012-04-27T18:06:18.713 に答える