0

これまでにこれを行ったことはありません。オートコンプリート リスト項目ごとに複数の LDAP 属性を表示しようとしています。

たとえば、ldap で「admin」を sAMAccountName として検索すると、検索関数は一致ごとに 2 つの値を返します。sAMAccountName と idnumber であるため、リスト項目には sAMAccountName と idnumber の両方を含める必要があります。テキスト フィールドに入力された sAMAccountName "admin" だけではありません。各リスト項目の複数の属性をjQueryに読み取らせるにはどうすればよいですか?

def search
  if (params[:term] =~ /[a-zA-Z]/)
    @result = User.FindLdap("sAMAccountName", params[:term])
  else
    @result = User.FindLdap("idnumber", params[:term])
  end

  respond_to do |format|
    format.json { render :json=> @result.to_json }
    format.js
  end
end
$(function() {
  $("#term").autocomplete({
    source: function (request, response) {
      $.post("/users/search", request, response);
    },
    minLength: 2,
    select: function () {}
  });
});
4

1 に答える 1

0

ユーザーモデルの属性を特定するのは難しいですが、それらはsAMAccountNameとidnumberであると推測されるため、jQueryオートコンプリートのソースメソッドを置き換えます。

source: function( request, response ) {
    $.ajax({
        url: "/users/search",
        dataType: "json",
        data: {
            term: request.term
        },
        success: function( data ) {
            // remove users in line below if JSON is not prepanded with users attribute 
            response( $.map( data.users, function( user ) {
                return {
                    // this is formated string which will be visible in autocomplete list
                    // example "123213, admin"
                    label: user.idnumber + ", " + user.sAMAccountName, 
                    value: user.idnumber
                }
            }));
        }
    });
},

上記のコードは、サーバーからの応答をフォーマットに変換(マップ)します

[ { label: "<idnumber>, <sAMAccountName>" , value: "<idnumber>" }, .....]

jQueryオートコンプリートがこの配列の処理方法を知っていることを心配しないでください;)

于 2012-05-01T20:59:35.373 に答える