0

我以前从未这样做过,我正在尝试为每个自动完成列表项显示多个 ldap 属性。

例如,我在 ldap 中将“admin”搜索为 sAMAccountName,我的搜索函数为每个匹配项返回两个值。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 回答