本篇將給出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);
}
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可能沒寫相應的類名和方法名
常見錯誤後續會持續更新。