sench touch版本2.4
今天在修改list的一條記錄時,需要重新設置store綁定該list的那條記錄。但在設置記錄時出現不能解決的問題
場景如下:
itemTpl: '<div style="font-size: small;"><input type="checkbox" id="putmaterialcheckbox_{materialId}">'
+ '物料編號:{materialCode} 物料名稱:{materialName}<br/>'
+ '型號規格:{materialModel}<br/>'
+ '已出庫數量:{actualAmount} 暫存庫數量:{tempStoreAmount}'
+'</div>'
+'<div style="font-size: small;color:red" name="putmaterialamount" id="putmateriallist_{materialId}" >'
+ '本次入暫存庫數量:{enabelTempStoreAmount}'
+</div>'
list的內容是用itemtpl設置的,在最前面加了一個checkbox,當觸發itemtap事件時,我需要將checkbox變換狀態,並且同時將checkbox狀態設置到store的該條record中去。
itemtap事件如下
itemtap:function(list,index,target,record){
var materialId = record.get('materialId');
var checkbox=Ext.getDom('putmaterialcheckbox_'+materialId);
if(checkbox.checked==true){
checkbox.checked=false;
record.set('checkboxvalue',false);
}else{
checkbox.checked=true;
record.set('checkboxvalue',true);
}
}
然而在執行時,checkbox的狀態始終沒有變化,我調試將record.set('checkboxvalue',true);語句去掉,狀態就沒有問題,跟着變化了。那麼問題一定在這個語句中,跟進源碼查詢,終於在list.js裏面發現下面代碼,瞬間就明白了緣由。ext的源碼中list的store記錄被更改時,會同時重新繪製這條記錄的list內容,而首次加載的這條記錄的DOM對象會被更新,而我在記錄更新前獲取的checkbox已經不存在了,因此無論怎麼設置,頁面也不會更新。解決方案是重新獲取這個checkbox,重新設置狀態,問題解決!
itemtap:function(list,index,target,record){
var materialId = record.get('materialId');
var checkbox=Ext.getDom('putmaterialcheckbox_'+materialId);
if(checkbox.checked==true){
//
record.set('checkboxvalue',false);
var checkboxNew=Ext.getDom('putmaterialcheckbox_'+materialId);
checkboxNew.checked=false;
}else{
//
record.set('checkboxvalue',true);
var checkboxNew=Ext.getDom('putmaterialcheckbox_'+materialId);
checkboxNew.checked=true;
}
},