關於mini-ui的checkboxcolumn的Bug

最近在做的一個項目,用到了mini-ui,之前只是聽說過沒咋用過,沒辦法項目來了,現學現用吧!


一直都參考着API挺順利的,但是在一個場合發生了個奇怪的問題,值得深究。

看如下界面:

<tr>
<span style="white-space:pre">	</span><th><label for="zycd">負責人:</label></th>
	<td><input style="width:98%" id="simpleAssignment" name="monitorUid" class="mini-combobox" 
		textField="text" valueField="id" showNullItem="true" onvaluechanged="setAssignment"
		url="/Domain/DynamicAjax.do?serviceUrl=pmbase_ProjectServiceImpl/getProjectMembers/$pid"/>
	</td>
</tr>

<tr style="display:true" >
		<td width="10%">
			<label>參與人<font color="red">*</font>:</label><br>
			<a class="mini-button" iconCls="icon-add" οnclick="addRow('Assignment')" plain="true">增加</a>
			<a class="mini-button" iconCls="icon-remove" οnclick="removeRow('Assignment')" plain="true">刪除</a>   
		</td>
		<td colspan="3" width="80%">
			<div id="Assignment" name="Assignment" class="mini-datagrid" style="width:99%;height:200px" idField="id"
			    allowResize="false"  allowCellEdit="true" allowCellSelect="true" multiSelect="false" pageSize="20" showFooter="false"
				oncellendedit="assignmentEndEdit" 	 oncellcommitedit="assignmentEndEdit" >
			    <div property="columns">
			        <div field="assignmentUid" name ="assignmentUid"  vtype="require" type="comboboxcolumn" headerAlign="center" allowSort="false">資源
			            <input property="editor" class="mini-combobox" style="width:100%;"
			            	url="/Domain/DynamicAjax.do?serviceUrl=pmbase_ProjectServiceImpl/getProjectMembers/$pid" />
			        </div>
			        <div field="units" vtype="require" allowSort="true" >工作量(工時) 
			            <input property="editor" class="mini-spinner" minValue="1" maxValue="10000"  style="width:100%;" />
			        </div>
			        <div field="assignmentNotes" headerAlign="center" allowSort="false">任務描述
			            <input property="editor" class="mini-textarea" style="width:100%;" minHeight="120"/>
			        </div>
			        <div field="isfzr"  id="isfzr"  type="checkboxcolumn" headerAlign="center"  >負責人
			        </div>
			    </div>
			</div>
		</td>
	</tr>


關於這個mini-datagrid,其中有兩個監聽編輯器修改的事件,oncellendedit和oncellcommitedit但是都指向的是同一個方法,這是小弟最後被迫做出的的決定,因爲miniui的oncellendedit對下面的負責人選項,即type爲checkboxcolumn的點擊事件並不監聽,它應該是隻監聽了上面的的類文本框的編輯和修改,之後小弟使用了miniui官方api中的各種監聽事件,比如(下表來源於miniui官網):


Name EventObject Description
columnschanged   列改變時激發。如列顯示/隱藏、列寬調整、列增加/刪除等情況。
rowclick
{
    sender: Object, //表格對象
    record: Object //行對象
}
行點擊時發生
rowdblclick
{
    sender: Object, //表格對象
    record: Object //行對象
}
行雙擊時發生
rowmousedown
{
    sender: Object, //表格對象
    record: Object //行對象
}
行鼠標按下時發生
cellclick
{
    sender: Object, //表格對象
    record: Object, //行對象
    column: Object //列對象
}
單元格點擊時發生
cellmousedown
{
    sender: Object, //表格對象
    record: Object, //行對象
    column: Object //列對象
}
單元格鼠標按下時發生
headercellclick
{
    sender: Object, //表格對象
    column: Object //列對象
}
表頭單元格點擊時發生
headercellmousedown
{
    sender: Object, //表格對象
    column: Object //列對象
}
表頭單元格鼠標按下時發生
headercellcontextmenu
{
    sender: Object, //表格對象
    column: Object //列對象
}
表頭單元格點擊右鍵時發生
beforeload
{
    sender: Object, //表格對象
    data: Object    //參數對象
    cancel: Boolean 
}
數據加載前發生
preload   數據加載,設置到Grid前發生
loaderror
{
    sender: Object, //表格對象
    xhr: Object, //ajax對象
    errorMsg: String //錯誤信息
    errorCode: int  //錯誤碼
}
數據加載錯誤時發生
load
{
    sender: Object, //表格對象
    xhr: Object,    //ajax對象
    data: Array     //數據    
}
數據加載成功時發生
update   表格渲染完畢事件
drawcell
{
    sender: Object,
    rowIndex: Number,
    columnIndex: Number,
    record: Object,    
    column: Object,
    field: String,
    value: String,
    cellHtml: "",
    rowCls: "",
    cellCls: "",
    rowStyle: "",
    cellStyle: ""
}
繪製單元格時發生
cellbeginedit
{
    sender: Object,
    rowIndex: Number,    
    record: Object,
    column: Object,
    field: String,
    editor: Object,
    value: String,
    cancel: false
}
編輯開始前發生
cellcommitedit
{
    sender: Object,
    rowIndex: Number,    
    record: Object,
    column: Object,
    field: String,
    editor: Object,
    oldValue: Object,
    value: Object,
    cancel: false
}
編輯值提交前發生
cellendedit
{
    sender: Object,
    rowIndex: Number,    
    record: Object,
    column: Object,
    field: String,
    editor: Object,
    value: String
}
編輯結束時發生
celleditenter
{
    sender: Object,
    record: Object
}
編輯器按回車時發生
selectionchanged   行選擇改變時發生
beforeselect
{
    sender: Object,
    record: Object,
    cancel: Boolean
}
行選中前發生
beforedeselect
{
    sender: Object,
    record: Object,
    cancel: Boolean
}
行取消選中前發生
select
{
    sender: Object,
    record: Object
}
行選中時發生
deselect
{
    sender: Object,
    record: Object
}
行取消選中時發生
cellvalidation
{
    sender: Object,
    record: Object,
    column: Object,
    field: String,
    value: String,
    isValid: Boolean,  //是否驗證通過
    errorText: ""   //錯誤提示文本
}
單元格驗證時發生(一般在單元格編輯結束時)
drawsummarycell
{
    sender: Object,
    result: Object,     //服務端返回的原始數據對象
    records: Array,     //行數組
    column: Object,     
    field: String,
    value: String,
    cellHtml: "",
    cellCls: "",
    cellStyle: ""
}
繪製彙總單元格事件
resize   表格拖拽調節尺寸時發生
表網址:http://www.miniui.com/docs/api/index.html#ui=datagrid


只有cellcommitedit,cellmousedown僅僅幾個可以監聽到checkboxcolumn的點擊修改。


在處理這個列表時,由於需求是選擇了負責人,上面的負責人進行聯動改變,起初採用了var data = mini.get('Assignment').data;方法來獲取列表的現在值,但有個問題,是這個方法獲取到的永遠都是點擊按鈕之前的列表值,並不能實時的獲取到點擊後列表的值。於是在朋友的幫助下,小弟可算找到方法,既可以點擊監聽又可以聯動改變的方法。


assignmentEndEdit = function(e) {
	var grid = mini.get('Assignment');
	if(e.field == 'isfzr'){
		var fuzerenId;
		if(e.value){
			mini.get("simpleAssignment").setValue(e.row.assignmentUid);
		}
	}
}

看來,js中e的妙用還是需要你我來共同掌握的呀!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章