Dorado7常用JS以及常見錯誤

本篇將給出Dorado7的常用js和常見錯誤:

1.dataSet添加數據

view.get("#dsProduct").getData().insert();
或者view.get("#dsProduct").insert();
view.get("#dsProduct.data").insert();推薦使用                       
“#dsProduct.data”表示拿到數據對象

2.刪除當前選擇記錄
var record = this.get("#dsProduct.data:#");
if (record) {
    dorado.MessageBox.confirm("確認要刪除當前記錄嗎?", function(){
        record.remove();
    });
}
else {
    dorado.MessageBox.alert("當前沒有數據可以刪除!");
}

//獲得當前dataset的字段,並賦值(dorado7升級包,特別注意)
var aaa = view.get("#dsProduct.data:#").get("xxx");
view.get("#dsProduct").set("parameter",{
    aaa: aaa,
    org:"test"
});

//含有下級Reference
view.get("#dsPrCenter").getData("#").getData("#stmain");
view.get("#dsPrCenter").getData("#.#stmain");

3.dataset放棄當前操作數據
view.get("#dsProduct.data:#").cancel();

4.顯示dialog對話框
view.id("dialogEdit").show();
view.get("#dialogEdit").show();

5.隱藏dialog對話框
view.get("#dialogEdit").hide();

6.參數查詢,其中默認情況下Entity中存儲數據的key值使用每一個AutoFormElement的name屬性;如果使用了property屬性,那麼key將使用property屬性設定的值
var entity = this.get("#autoForm1.entity");//保證json對象內部的參數與後臺接受的parameter參數名相同
view.get("#dsProduct") .set("parameter",entity).flushAsync();

//獲得AutoForm中的entity內容
var entity = view.id("recAutoForm").get("entity");
alert(entity.length+"   "+entity.width);

7.獲得當前實體對象數據的“產品名稱”
dorado.MessageBox.alert(view.get("#dsProduct.data:#.productName"));

8.對實體對象屬性設值
view.set("#dsProduct.data:#.productName","testValue");

9.通過json對象賦值,清除查詢框內容
view.set("#autoForm1.entity", {
    productName: null,
    unitsInStock: null
});
//升級版本
view.get("#themeDetailForm.entity").set("REASON_MEMO","");//設定當前編輯框值爲空

10.ListDropDown和AutoMappingDropDown的區別
ListDropDown ==》self.set("value",1);系統直接會將數值1賦給文本域
AutoMappingDropDown ==》self.set("value",1);系統會根據對應的文本域的屬性mapValues綁定的Entity進行映射顯示。
例如這裏映射的Entity對象爲1 男,0 女。在這裏文本域會根據設置顯示爲“男”

11.通過點擊菜單節點,獲得當前節點對應dataset的entity對象對應的屬性
var node = self. get("currentNode");
if(node.get("level")==3){
	//獲得當前節點對應的數據實體對象
	var entity = self.get("currentNode.data");
	//通過實體對象名稱.屬性獲得指定的屬性值
	var id = entity.get("example.id");
	//刷新對應的dataset
	this.get("#dsExample").set("parameter",id).flushAsync();
}

12.TabControl中tab的切換
// 通過tab的name屬性切換
view.get("#tabControl").set("currentTab","tab2");
// 通過tab的索引(index)屬性切換
view.get("#tabControl").set("currentIndex",1);

//根據名字切換tab
var tab = self.get("currentTab").get("name");
if(tab!="tab4"){
	view.id("tabControl").disableTab("tab4");
}

13.對AutoForm表單中的字段設定只讀和是否顯示
var element = view.get("#themeDetailForm").getElement("REASON_MEMO");
element.set("readOnly",false);
view.get("#procTopicHeaderForm").getElement("TOTAL_SCORE").set("visible",false);

14.對按鈕的控制顯示
view.get("#btnPrint").set("visible",true);




15.EntityList的遍歷
var datas = view.id("dsHeader").getData("#.detail");
datas.each(function(entity){
	alert(entity.get("RIGHT_MODE"));
	alert(entity.get("RIGHT_ITEM"));
});
//獲取當前選擇的項
var datas = view.get("#dgProcZperright").get("selection");
var flag = false;
//遍歷選擇項,判斷當前被遍歷的數據是否包含已生成試卷的項
datas.each(function(entity){
	var isCreatePaper = entity.get("IS_CREATE_PAPER");
	//若有調整,若無執行生成過程
	if(isCreatePaper=="1"){
		flag = true;
		return false;
	}else{
		flag;
	}
});
//若有調整,若無執行生成過程
if(flag==true){
	dorado.MessageBox.alert("當前選擇項包含已生成試卷的項,請調整!");
}else{
}

//選擇項是否選擇(false代表未選中,true代表被選中)
view.id("sourceGrid").set("selection","false");
alert(view.id("sourceGrid").get("selection"));


//設定爲單項選擇項
view.get("#sourceGrid").set("selectionMode","singleRow");

//判斷選擇的項數量
var entity = view.id("sourceGrid").get("selection");
if(entity.length>1){

}

16.獲取Reference對應的DataType中的字段
var entity = view.id("dsHeader").getData("#.#detail");
alert(entity.get("RIGHT_MODE"));

var entity = view.get("#dataSetGroup.data:#.#users");
alert(entity.get("username"));

17.dataset中數據傳遞set
//由於RIGHT_MODE字段的無法保存數據,使用了自定義字段MODE替代,傳遞後臺保存數據
var entity = view.id("dsHeader").getData("#.#detail");
var right_mode = entity.get("RIGHT_MODE");
if(right_mode!=null){
	entity.set("MODE",right_mode);
}

18.關閉下拉框
view.id("customDropDown").close(value);

19.獲得dataset的當前記錄常用的寫法
var entity = view.get("#dataSetGroup.data:#.rp_confield_desc");
var entity = view.id("dataSetGroup").getData("#.rp_confield_desc");
var entity = view.get("#dataSetGroup.data:#");
var a = entity.get("rp_confield_desc");

var entity = view.get("#dataSetGroup.data:#").get("rp_confield_desc");

20.action的參數傳遞方式,以及獲得返回值
var rightMode = "";
view.id("actGetPatter").set("parameter",{
	"tableName" : tableName,
	"fieldName" : fieldName
}).execute(function(result){
	rightMode = result.RIGHT_MODE;
});
後臺對應的方法
public Map<String, Object> getPatter(String tableName, String fieldName) {}

20.//iReport的下載和在線預覽
bdf.JasperReports.prototype.showReport=function(jasperFile,parameters){}
bdf.JasperReports.prototype.downloadReport=function(jasperFile,type,parameters){}

21.通過業務的某個字段在刷新後再次定位到當前數據實體
var entity1 = view.get("#dataSetUser.data:#");
var entityList = view.get("#dataSetUser.data");
view.get("#dataSetUser").set("pageNo",2);
view.get("#dataSetUser").flushAsync();
//entityList.first();
entityList.each(function(entity){ 
   if(entity1.get("username")==entity.get("username")){
       entityList.setCurrent(entity);
   }
}); 

22.view中定義公用的function
self.resetUserPhoto = function(){}
window.changeUserPhoto = function(img){}

window.self 功能:是對當前窗口自身的引用。它和window屬性是等價的。語法:window.self。注:window、self、window.self是等價的。
window.top 功能:返回頂層窗口,即瀏覽器窗口。 語法:window.top 注:如果窗口本身就是頂層窗口,top屬性返回的是對自身的引用。
window.parent 功能:返回父窗口。語法:window.parent 注:如果窗口本身是頂層窗口,parent屬性返回的是對自身的引用。

23.動態創建按鈕並關閉父頁面的dialog
this.createButton = function(){
    view.addChild(new dorado.widget.Button({
        id: "saveButton",
        caption: "中途提交",
        action: "SavePersResult",
        icon: "url(>skin>common/icons.gif) -20px 0px",
        onClick: function(self,arg){
            view.id("SavePersResult").execute();
			//關閉父頁面
			window.parent.$id("dialogTopicDetail").objects[0].hide();
        }    }));
}


將控件添加到AufoForm中
this.createMidButton = function(){
    view.id("form").addElement(new dorado.widget.Button({
        id: "saveMidButton",
        caption: "中途提交",
        action: "SavePersResult",
        icon: "url(>skin>common/icons.gif) -20px 0px",
        onClick: function(self,arg){
            view.id("SavePersResult").execute();
            if (window.parent.$id("dsTopicList").objects[0].getData("#").get("IS_CREATE_PAPER") == "0") {
                window.parent.$id("dsTopicList").objects[0].getData("#").set("IS_CREATE_PAPER","1");
                window.parent.$id("updateAction1").objects[0].execute();
            }
			//關閉父頁面
            window.parent.$id("dialogTopicDetail").objects[0].hide();
			        }    }));
}


24.修改TextEditor的文字樣式以及邊框顏色
在onRefreshDmo添加
$(self.getDom().firstChild).css("color","yellow");
var oHead = oHtml.firstChild;  
var oBody = oHtml.lastChild; 
var oHead = oHtml.childNodes.item(0);  
view.set("#text.style",{
    "border": "1px #FC3737 solid",
    color: "red"
});

25.返回datagrid的rownumcolumn的序列號,其中rowmun的下表從0開始,所以取值的時候位index+1
var grid = view.id("dgPrStitem");
var entity = grid.getCurrentItem();
var row = grid.get("itemModel").getItemIndex(entity)+1;
alert(row);


26.datagrid數據行的上下移動
//datagrid中數據向下移動一行(向上移動的效果思路一致)
//思路:
//1. 首先獲得當前移動的數據entity,並且將光標移到到下一行move(1);
//2. 其次記錄移動後光標定位的數據eneity,並且將上一行的數據remove掉;
//3. 最後將原本的entity數據insert到光標定位到當前行的後面。
//這樣整體上形成的效果就是數據向下移動
var grid = view.id("dgPrStitem");
var entity = view.id("dsPrStitem").getData("#");
var entityList = view.id("dsPrStitem").getData();
entityList.move(1);
entityList.remove(entity);


//獲得當前數據的序列號,修改移動後數據的序列號
var currentity = view.id("dsPrStitem").getData("#");
var rown = grid.get("itemModel").getItemIndex(currentity)+1;
currentity.set("RANK_ORDER",rown);


//添加的數據,並修改序列號
entityList.insert(entity,"after",currentity);
var insertentity = view.id("dsPrStitem").getData("#");
var rowns = grid.get("itemModel").getItemIndex(insertentity)+1;
insertentity.set("RANK_ORDER",rowns);
insertentity.setState(dorado.Entity.STATE_MODIFIED);
view.id("actStItem").execute();

27.bdf對頁面佈局的保存和重置
保存界面
var componentProfile = new bdf.ComponentProfile.DataGrid();
componentProfile.saveGridSet(this,"gridMain");

重置界面
var componentProfile = new bdf.ComponentProfile.DataGrid();
componentProfile.resetGrid(this,"gridMain");

28.CheckBox換行問題
不考慮在默認支持此功能,給兩個解決辦法:
1. 使用exClassName
比如爲CheckBox定義一個exClassName是d-checkbox-multiline,然後這麼定義CSS:

.d-checkbox-multiline {
	height: auto;
}
 
.d-checkbox-multiline .caption{
	white-space: normal;
}
RadioButton類似。


2. 既然使用了HtmlContainer,就使用原生的Html中的CheckBox和RadioGroup。

29.datagrid列頭換行問題
onRenderHeaderCell 事件中寫
arg.dom.innerHTML="1<br>2<br>3";

30.自定義控件創建
var dom = jQuery(arg.dom);
dom.empty();
	dom.xCreate({
	        tagName: "Button",
	        content: "打印",
	        onclick: function(){
				alert(11);
	        }
    });

31.鼠標指針移動到指定的對象上時發生
在控件的onCreateDom()中添加
arg.dom.onmouseover = function(){
    //這裏面處理
    dorado.widget.NotifyTipManager.notify("鼠標移動到我上面時,會自動出現提示信息!");
}

32.鼠標移動到某個控件上讓鼠標指針變成小手
添加style  cursor:pointer

33.樹節點的處理(遞歸樹)
------------------------------------------------------------------------------------------------------
/**
 * 獲得所有的頂級節點
 */
 //根節點,此節點時樹狀列表內部的頂層節點
var root = self.get("root");
var nodes = root.get("nodes");


 //節點記錄的變量
var labels = "", label = "", childLabels = "", rootLabel="", childNodes, childChecked, count = 0;


//遍歷根節點
nodes.each(function(node){  
	var checked = node.get("checked");
	
	//checked包含三種狀態,選中(true)、半選中(null)、不選中(false)。當爲true、null時表示選中
	if(checked!=false){   
		count++;  //父節點計數器
		rootLabel =  node.get("label");  //父節點
		label = getChildNode(node);  //子節點
		if(childLabels){
			childLabels="";
		}
		
		//拼接label字符串
		labels += count+"."+rootLabel +": "+ label+";  ";  
	}
	
});


//將拼接的label賦值給label
view.id("label4").set("text",labels);




/**
 * 處理遞歸子節點的函數
 * @param {Object} node
 */


function getChildNode(node){
	//判斷當前選中節點是否展開,並是否包含被選中的子節點
	if(node.get("expanded")==true){
		childNodes = node.get("nodes");
		childNodes.each(function(childNode){
			childChecked = childNode.get("checked");
			if(childChecked!=false){
				if(childLabels){
					childLabels += ","+childNode.get("label");
				}else{
					childLabels+=childNode.get("label");
				}
				//遞歸函數調用
				getChildNode(childNode);
			}
		});
		return childLabels;
	}
}

34.DataGrid的DataColumn中定義CheckBox
/**
 * 獲得所有的頂級節點
 */
 //根節點,此節點時樹狀列表內部的頂層節點
var root = self.get("root");
var nodes = root.get("nodes");


 //節點記錄的變量
var labels = "", label = "", childLabels = "", rootLabel="", childNodes, childChecked, count = 0;


//遍歷根節點
nodes.each(function(node){  
	var checked = node.get("checked");
	
	//checked包含三種狀態,選中(true)、半選中(null)、不選中(false)。當爲true、null時表示選中
	if(checked!=false){   
		count++;  //父節點計數器
		rootLabel =  node.get("label");  //父節點
		label = getChildNode(node);  //子節點
		if(childLabels){
			childLabels="";
		}
		
		//拼接label字符串
		labels += count+"."+rootLabel +": "+ label+";  ";  
	}
	
});


//將拼接的label賦值給label
view.id("label4").set("text",labels);




/**
 * 處理遞歸子節點的函數
 * @param {Object} node
 */


function getChildNode(node){
	//判斷當前選中節點是否展開,並是否包含被選中的子節點
	if(node.get("expanded")==true){
		childNodes = node.get("nodes");
		childNodes.each(function(childNode){
			childChecked = childNode.get("checked");
			if(childChecked!=false){
				if(childLabels){
					childLabels += ","+childNode.get("label");
				}else{
					childLabels+=childNode.get("label");
				}
				//遞歸函數調用
				getChildNode(childNode);
			}
		});
		return childLabels;
	}
}

35.Label內容加粗
style添加font-weight=bold

36.鼠標指針
//獲得鼠標的位置
var clientX = arg.event.clientX;
var clientY = arg.event.clientY;


//指定畫中機關在指定區域內顯示,否則隱藏
if ((clientY > 20) && (clientX > 300)) {
    view.id("floatPanel1").set("visible",true);
    view.id("floatPanel2").set("visible",true);
    view.id("floatPanel3").set("visible",true);
}else {
    view.id("floatPanel1").set("visible",false);
    view.id("floatPanel2").set("visible",false);
    view.id("floatPanel3").set("visible",false);
}

37.調用dom事件(onrefreshDom)
arg.dom.onmousemove = function(){
	view.id("floatPanel1").set("visible",true);
    view.id("floatPanel2").set("visible",true);
    view.id("floatPanel3").set("visible",true);
}


arg.dom.onmouseout = function(){
	view.id("floatPanel1").set("visible",false);
    view.id("floatPanel2").set("visible",false);
    view.id("floatPanel3").set("visible",false);
}

38.IFrame的內置對象
var windows = view.id("iframe1").get("iFrameWindow");
var container = windows.$id("containerA").objects[0];


39. 根據key得到mapValues的value值

if (arg.property == "whCode") {
	// 由code拿到name
	var key = arg.entity.get("whCode");
	var value = arg.entity.getPropertyDef("whCode").getMappedValue(key);
	arg.entity.set("whAbbr", value);
}


40.dataGrid onRenderRow事件 隔行換色
var row = self.get("itemModel").getItemIndex(arg.data)+1;
if(row%2==0){
	arg.dom.style.background = "red";
}else{
	arg.dom.style.background = "";
}

常見錯誤:

1.無法在"XXXXX"類中查找到唯一匹配的"XXXX"方法
DataSet pageSize可能沒寫,確認類型和方法名存在
2.Unknown ExposedService [xxxxxx#xxxx]

AJaxAction裏面的Service可能沒寫相應的類名和方法名

常見錯誤後續會持續更新。

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