js的异步代码
js的异步代码
js中的代码都是单线程的。遇到异步的代码,特别注意。因为调用getRoomOption过一次,再执行setRoomOption不会报错,如果没有执行的话,那么option就会出错。
initComponent:function(){//先执行
var me = this;
me.applyMeetingOrderMenu();
me.responseToMessageHub();//所有消息绑定
me.getRoomOption();//默认已经触发一次。
me.callParent();
},
/***********
* 2019年1月10日
* 获取所有的会议室选项
***********/
getRoomOption:function(){
var me=this;
if(me.roomOption){
return me.roomOption;
}
Ext.Ajax.request({
url: SHINEVMSHTTP +'/admin/room/list/getroomoption',
method:"GET",
success: function(response, opts){
//解码
var obj = Ext.decode(response.responseText);
//整理后的数组
var ret={};
Ext.each(obj,function(option){
var id=option['conferenceroom_id'];
if(!ret[id]){
ret[id]=[];
}
ret[id].push(option['option_value']);
});
me.roomOption=ret;
return ret;
}
});
},
/***********
* 2019年1月10日
* 设置当前已选会议室的电话、视频会议选项
***********/
setRoomOption:function(roomId){
var me=this;
var option=me.getRoomOption();
var cur=option[roomId];
var vm=me.getViewModel();
var v=vm.getData();
//先设置全部不可见
vm.set({
'option1':true,
'option2':true,
'option3':true
});
//设置该会议室的可见选项
Ext.each(cur,function(v){
var o={};
o['option'+v]=false;
vm.set(o);
});
//默认选第一个可选项。
for(var i=1;i<=3;i++){
if(v['option'+i]===false){
vm.set({meeting_video:''+i});
return ;
}
}
}