Bui/select 在加載數據源時,數據源如果采用$.post的方式獲取數據,則無法獲取到數據源,原因是bui加載屬於異步加載,在post執行完之前,bui已經加載完成。因此無法得到post返回的數據集。因此可將bui控制在post內部使用。獲取玩數據再去加載bui,解決bui/select 異步加載無法獲取數據問題。
function initTrunkLink(shortName) {
var trunkLinkArr = [];
$.post(contextPath + 'getIndexCommonAction/getAllIndex.cn', {
shortName : shortName
}, function(data) {
var allIndex = eval(data);
$.each(allIndex, function(i, index) {
var obj = {};
obj.value = index.id;
obj.text = index.indexName;
trunkLinkArr.push(obj);
});
// bui加載數據
BUI.use('bui/select',function(Select){
selectTrunkLink = new Select.Select({
render:'#s3',
valueField:'#trunkLink',
multipleSelect:true,
items:trunkLinkArr
});
selectTrunkLink.render();
$.ajax({
type : "POST",
data:{"shortName" : shortName},
url : contextPath + "getIndexCommonAction/getDataMap.cn",
dataType : "json",
async : false,
success: function(data){
var indexData2 = eval(data);
if(indexData2.length!=0){
var indexs2=indexData2[0].id;
for(var i=1;i<indexData2.length;i++){
indexs2+=","+indexData2[i].id;
}
selectTrunkLink.setSelectedValue(indexs2);
}
}
});
});
}, 'json');
}
並且在如果要初始化select,給select默認選中某個選項時,則不可以用$.post獲取,使用ajax獲取才可獲取到。有關異步加載問題找個時間整理一下。