在domino開發中我們經常會遇到表單上需要乙個類似table的元件,你可以增刪改等。比如我有乙個張報核單據,上面需要詳細列出每項金額的明細,我們先看完成後的效果:
上面的圖就是我用extjs完成的。
2.功能介紹
這個grid元件可以完成增加,刪除,插入,修改,排序等功能。每項功能的操作都只是針對grid,不需要額外的formpanel。雙擊單元格就可以修改。
3.如何使用
這個元件我做的盡可能通用,由於是專門為domino平台定製,grid中的資料均儲存在notes的多值域中。使用這個gird元件,你需要提供以下幾個陣列:
(1):多值網域名稱的陣列(第一列對應的序號多值域的名字必須為seq)
(2):gird title顯示文字的陣列
4.注意問題:
1.ext中datefield實際你取出值存到多值域的時候是乙個utc的時間。如果你在新的系統中使用該元件,這個沒有問題。由於我的系統原來的多值域儲存的時間為「2009-08-08」類似形式,這樣在顯示的時候就無法識別了。
2.元件的校驗實際上就是ext各個form元件的校驗,這個要根據不同系統的業務來處理。
3.許可權控制,在domino中的系統中工作流居多,不同的流程條件下需要有許可權控制,這個有兩種方案,
方案一:根據不同條件對grid的列是否設定editor屬性,並控制按鈕的屬性。
方案二:由於grid是呈現在表單上的div元素,可以控制該div的隱藏條件,然後根據是否能取得到div dom來判斷去例項不同的grid。
由於在domino中js和表單的互動不是很方便,我選擇方案二。
4. 7.關於編號的維護只維護新增,插入時,刪除時不維護。
5.程式介紹
5.1.三個公用的函式如下:
1. 將多值域轉換為陣列返回
2. 多陣列進行增,刪,插入
3. 根據不同的型別去例項化不同的ext元件
function cotoarray(name)
);break;
case "timefield":
editorcm=new ext.form.timefield();
break;
case "combobox":
editorcm=new ext.form.combobox();
break;
case "numberfield":
editorcm=new ext.form.numberfield();
break;
return editorcm;
5.2.下面是ext.onready部分:
ext.onready(function();
var colmread=new ext.grid.columnmodel(arrcolmread);
//-----end construct the read colunm of grid
//----- construct the edit colunm of grid
var sm = new ext.grid.checkboxselectionmodel();
var arrcolm=new array();
for(var k=0;k<=arrname.length;k++)
if(k==0)
arrcolm[k]=sm;
else
if(arrtypename[k-1]=="combobox")
arrcolm[k]=)};
else if(arrtypename[k-1]=="datefield")
arrcolm[k]=;
else
arrcolm[k]=;
var colm=new ext.grid.columnmodel(arrcolm);
//-----end construct the edit colunm of grid
// create the data store
var strdata= new array();
if(cotoarray(arrname[0])!="")
for (i=0;istrdata[i]=new array();
for(var j=0;jstrdata[i][j]=cotoarray(arrname[j])[i]
var store1=new ext.data.******store(
}//---end grid1
//-------add1 button click
if(ext.getdom('add1')!=null)
var button = ext.get('add1');
var win;
button.on('click', function(){
var re=new ext.data.record(
seq:grid1.getstore().getcount()+1
var store2=grid1.getstore();
store2.add(re);
store2.commitchanges();
//------begin add at last
opmultifieldarray(arrname,0,0,(grid1.getstore().getcount()+1));
//------end add1 button click
//----------delete1 button click
if(ext.getdom('delete1')!=null)
var delbutton=ext.get('delete1');
delbutton.on('click',function(){
var _rd = grid1.getselectionmodel().getselected() ;
var delindex=grid1.getstore().indexof(_rd);
if(grid1.getselectionmodel().getcount()==1)
grid1.getstore().remove(_rd);
grid1.getstore().commitchanges();
else
alert('每次只能刪除一條!');
opmultifieldarray(arrname,1,delindex);
//-----------end delete1 buttom click
//-----------begin insert1 buttom click
if(ext.getdom('insert1')!=null)
var insbutton=ext.get('insert1');
insbutton.on('click',function(){
var _rd = grid1.getselectionmodel().getselected() ;
var insindex=grid1.getstore().indexof(_rd);
var re=new ext.data.record(
seq:insindex+1
var store2=grid1.getstore();
if(grid1.getselectionmodel().getselected()!=null)
store2.insert(insindex,re);
store2.commitchanges();
else
alert('請選擇要插入的位置!');
//------begin insert at index
opmultifieldarray(arrname,2,insindex,insindex);
var arrseq=cotoarray(arrname[0]);
for(i=0;iarrseq[i]=i+1;
ext.getdom(arrname[0]).value=arrseq.join(";");
//------end insert at index
//-----------end iinsert1 buttom click
5.3.子表單中需要加入的html**部分:
注意這些都為內嵌html,並且需要設定隱藏條件。
還有建立需要的多值域.
打造基於Linux的全功能開發系統
前兩天,裝有windows server 2003的第一硬碟 ibm 騰龍4 40g 在我啟動windows的過程中終於香消玉隕,幸運的是在第二硬碟上裝了個linux redhat 9.0 讓我在買硬碟前的這幾天有機可用。在以前,linux僅僅作為乙個簡單的c開發平台和乙個試驗性的作業系統,趁win...
vim自帶的補全功能
vi7.0版本自帶了自動補全功能omni completion。那麼vim是如何找到匹配的單詞的呢?在預設的情況下,vim在查詢乙個單詞時是按照如下的步驟 1 在當前檔案中進行查詢 2 在其他視窗中進行查詢 3 在其他的已裝入的緩衝區中進行查詢 4 在沒有裝入緩衝區的檔案中進行查詢 5 在當前的標記...
centos的yum自動補全功能
之前用ubuntu的時候,apt get install 後面按tab可以把包名自動補全並給出可用的包的提示。新機器裝了centos7標準版的也有這個功能,不過裝了centos7 minimal的卻沒這個功能,yum install按tab後提示的是本地檔案的列表。後來上網找了一下,原來這個是因為c...