2014-07-07 61 views
0

我一直在尋找一些其他的問題,試圖找出問題與我的代碼...我使用<input type='hidden' ...></input>字段來存儲所選個人的ID上a jQuery select2下拉式選單。當我回到頁面時,我想要選擇顯示最後一個人的姓名。我可以保存value屬性,並且當下拉菜單展開時 - 選擇正確的名稱。但是,實際名稱不顯示;只是一個空selectSelect2 initSelection文字值沒有顯示

enter image description here

這裏是我的初始化。 approvers參數是一個JSON OBJ與個人

var self = this; 

self.supervisorsDDL.select2({ 
    placeholder: "Select Supervisor", 
    minimumInputLength: 0, 
    width: 150, 
    data: { 
    results: approvers.Data, 
    text: 'FullName', 
    id: 'EmployeeID' 
    }, 
    id: function (e) { 
    if (e) 
     return e.EmployeeID; 
    }, 
    formatResult: function (e) { 
    if (e) 
     return e.FullName; 
    }, 
    formatSelection: function (e) { 
    if (e) 
     return e.FullName; 
    }, 
    initSelection: function (item, callback) { 
    if (item.val() > 0) { 
     var eid = item.val(); 
     var name, obj; 
     $.get(
     self.jsonUrl, 
     { method: "GetApproverNameByEmployeeId", employeeId: eid }, 
     function (data, textStatus) { 
      if (data.Success) { 
      name = data.Data; 
      } 
     } 
    ); 
     obj = { EmployeeID: eid, FullName: name }; 
     callback(obj); 
    } 
    } // Set the ID for initSelection 
}).select2("val", self.selectedItemHidden.val()); 

兩個supervisorsDDLselectedItemHidden的隱藏字段,使用value屬性持有ID列表。冗餘是的,但更容易,並節省了時間。

+0

回調調用應該是Ajax響應功能的一部分。 ajax調用不會阻塞,所以回調被立即調用,並帶有錯誤的'obj'值。 – asawyer

+0

我相信你在說什麼,我應該使用select2進行異步調用。我所做的ajax調用不符合我通過的'obj',這是否重要?所做的調用是檢索整個列表。 – Joe

+0

沒關係,我會發表一個答案。 – asawyer

回答

1

在ajax響應處理程序中設置名稱值之前,您正在調用回調函數。將兩條線移到那裏,它應該沒問題。

initSelection: function (item, callback) { 
    if (item.val() > 0) { 
     var eid = item.val(); 
     var name, obj; 
     $.get(
     self.jsonUrl, 
     { method: "GetApproverNameByEmployeeId", employeeId: eid }, 
     function (data, textStatus) { 
      if (data.Success) { 
      name = data.Data; 
      //call the callback now that the ajax data is ready 
      obj = { EmployeeID: eid, FullName: name }; 
      callback(obj); 
      } 
     } 
    ); 
     // moved 
     //obj = { EmployeeID: eid, FullName: name }; 
     //callback(obj); 
    } 
    } 

這裏是我的一個項目工作的例子:

initSelection: function (element, callback) { 
    var id = '@Model.Id'; 
    if (id === null) return; 
    $.getJSON('@Url.HttpRouteUrl("DefaultApi", new { controller = "Search" })', { 
    'id': id 
    }, function (data) { 
    //called in the ajax handler 
    callback(data); 
    }); 
}