## 組件的使用
X5的界面是由組件構成的,組件是一個可以以圖形化方式顯示在屏幕上,并能與用戶進行交互的對象。組件是對數據和方法的封裝,有自己的屬性、事件和方法等。本文從組件的創建、屬性、方法、操作、事件、樣式、API、調試等方面介紹組件的使用。
# 目錄
* [1、由組件構成的界面](http://wex5.com/cn/?p=4202#1)
* [2、組件的創建](http://wex5.com/cn/?p=4202#2.1)
* [2.1、設計時擺放組件](http://wex5.com/cn/?p=4202#2.1)
* [2.2、動態創建組件](http://wex5.com/cn/?p=4202#2.2)
* [3、組件的屬性](http://wex5.com/cn/?p=4202#3.1)
* [3.1、使用設計器設置](http://wex5.com/cn/?p=4202#3.1)
* [3.2、使用表達式配置](http://wex5.com/cn/?p=4202#3.2)
* [3.3、使用js代碼修改](http://wex5.com/cn/?p=4202#3.3)
* [4、組件的方法](http://wex5.com/cn/?p=4202#4.1)
* [4.1、公共方法](http://wex5.com/cn/?p=4202#4.1)
* [4.2、私有方法](http://wex5.com/cn/?p=4202#4.2)
* [5、組件的操作](http://wex5.com/cn/?p=4202#5)
* [6、組件的事件](http://wex5.com/cn/?p=4202#6.1)
* [6.1、on開頭的事件(回調型事件)](http://wex5.com/cn/?p=4202#6.1)
* [6.2、bind開頭的事件(標準的dom事件)](http://wex5.com/cn/?p=4202#6.2)
* [7、組件的樣式](http://wex5.com/cn/?p=4202#7.1)
* [7.1、自定義組件樣式](http://wex5.com/cn/?p=4202#7.1)
* [7.2、修改系統樣式](http://wex5.com/cn/?p=4202#7.2)
* [7.3、引用樣式文件](http://wex5.com/cn/?p=4202#7.3)
* [8、組件的API](http://wex5.com/cn/?p=4202#8)
* [9、組件的調試](http://wex5.com/cn/?p=4202#9.1)
* [9.1、調試樣式](http://wex5.com/cn/?p=4202#9.1)
* [9.2、調試js代碼](http://wex5.com/cn/?p=4202#9.2)
# 1、由組件構成的界面
[](http://wex5.com/cn/wp-content/uploads/2015/04/comp1.jpg)
[](http://wex5.com/cn/wp-content/uploads/2015/04/comp2.jpg)
# 2、組件的創建
## 2.1、設計時擺放組件
1. 選擇合適的組件擺放到合適的位置
2. 調整組件的位置的兩種方法
簡單組件在設計器中拖動,紅線的位置就是目標位置
[](https://box.kancloud.cn/2015-09-22_560159788f710.jpg)
復雜組件在左側組件樹中拖動,黑線的位置就是目標位置,根據黑線不同的長短,可以將選中的組件拖動到任意的地方
[](https://box.kancloud.cn/2015-09-22_56015979b77c4.jpg)
上圖表示將formGroup3移動到formGroup2的上方,也就是調換了formGroup2和formGroup3的位置
[](https://box.kancloud.cn/2015-09-22_560159801dad8.jpg)
上圖表示將formGroup3移動到formGroup1的col12節點下,也就是col12下面會有兩個節點了,一個是原來的fWPBM,另一個是新移動過來的formGroup3
注:移動的位置不對,可以按Ctrl+Z撤銷
## 2.2、動態創建組件
### 1、動態創建X5組件
使用new方法,創建X5組件
首先引用組件的js文件
var Button = require("$UI/system/components/justep/button/button");
第一種方法,在參數中給出父節點parentNode,在new時會在父節點下直接創建出新的組件
var parentNode = this.getElementByXid("bar");
if (parentNode) {
var xid = "--" + (++this.i) + "--";
var flag = {
xid : xid,
label : xid,
parentNode : parentNode,
'class' : "btn btn btn-default"
};
var button = new Button(flag);
button.on("onClick", function(event) {
alert(event.source.get('label'));
});
}
第二種方法,不給出parentNode參數,在new時創建組件,調用addComponent方法后將新的組件加入到頁面中
var newContent = this.comp('contents1').add({});
this.button = new Button({
label : '新按鈕'
});
this.button.on('onClick', function(event) {
alert('單擊事件');
}, this);
justep.Component.addComponent(newContent.domNode, this.button);
### 2、動態創建html節點
var newContent = this.comp('contents1').add({});
var div = $("<div data-bind='click:divClick'>新的頁面</div>");
justep.Bind.addNodes(newContent.domNode, div);
//div的click事件調用的divClick方法
Model.prototype.divClick = function(){
alert('單擊事件');
};
# 3、組件的屬性
## 3.1、使用設計器設置
### 1、在屬性編輯器中設置
組件都有xid屬性,在同一個w文件中不能重復,通過xid可以獲取組件的js對象和jQuery對象。注意:X5使用單頁模式,系統會根據xid給組件生成不重復的id,因此不要自己增加id屬性。容易造成id重復。
藍色的屬性是必填屬性,屬性值可以輸入、下拉選擇、彈出窗口選擇
[](https://box.kancloud.cn/2015-09-22_56015980ad141.jpg)
### 2、通過右鍵菜單中設置
功能復雜的組件只在屬性編輯器中設置屬性是不夠的,設計器給組件提供了右鍵菜單,通過右鍵菜單提供復雜的設置功能。下面列舉了幾個設置了右鍵菜單的組件:
* data組件:編輯列、靜態數據、規則
* bizdata組件:編輯規則、增加過濾條件、計算關系、統計關系
* dataTables組件:添加列
* grid組件:添加列、設置分組、設置多列頭
* popMenu組件:在設計區域顯示或隱藏彈出菜單,增加菜單項和分割線
[](https://box.kancloud.cn/2015-09-22_5601598146402.jpg)
## 3.2、使用表達式配置
組件的屬性值分為普通值和表達式,表達式提供了組件屬性的動態能力,即簡化了代碼,又容易設置,是X5的又一亮點。在表達式中,根據不同的情況,可以使用$model\$data\$row等環境變量。關于表達式的詳細用法請參閱介紹綁定的相關文章。
[](https://box.kancloud.cn/2015-09-22_5601598372821.jpg)
下面列舉一些常用的表達式
* 場景:mainData中當前行的fState字段的值為啟用時,禁用按鈕顯示,否則不顯示
* 做法:設置按鈕組件 的bind-visible屬性為$model.mainData.val(‘fState’)==’啟用’
* 場景:mainData中當前行的fState字段的值為啟用時,禁用按鈕可用,否則不可用
* 做法:設置按鈕組件 的bind-enable屬性為$model.mainData.val(‘fState’)==’啟用’
* 場景:在list組件中,突出顯示選中的當前行
* 做法:設置list組件下面的li節點 的bind-css屬性為{‘bg-primary':val(‘fID’)==data.val(‘fID’)},其中bg-primary是Bootstrap里的一個樣式class
* 場景:表格中,當數量等于1時顯示粉底色,否則顯示黃底色
* 做法:設置grid組件或者dataTables組件的rowAttr屬性為
$row.val(‘fSL’)==’1’?{style:’background:pink;’}:{style:’background:yellow;’}
* 場景:表格中,計算金額列(fMoney)的合計值
* 做法:設置grid組件或者dataTables組件的金額列(fMoney)的footerData屬性為?$model.mainData.sum(‘fMoney’)
## 3.3、使用js代碼修改
組件提供了set方法,用來修改組件的屬性。設計器中的屬性有些只能在設計時設置,不能在運行時修改,因此set方法中能修改哪些屬性,還需要看API文檔中的具體說明。
看一下Button組件的API中set方法的描述,可以修改disabled、label等4個屬性,
[](https://box.kancloud.cn/2015-09-22_560159856a1f0.jpg)
例如:調整按鈕的標簽為啟用,狀態為不可用,圖標換成icon-play
this.comp('stateBtn').set({disabled:true,label:"啟用",icon:"icon-play"});
注意:set方法可以一次修改多個屬性,因此set方法中的參數是json,一定要寫大括號
# 4、組件的方法
## 4.1、公共方法
### 1、獲取和設置組件的屬性(get和set)
組件提供了set方法用于修改組件的屬性。在上面(二、組件的屬性(三)、使用js代碼修改)中介紹了set方法。set方法可以一次修改多個屬性,因此**set方法中的參數是json,一定要寫大括號**。
組件提供了get方法用于獲取組件的屬性,get方法一次只獲取一個屬性的值,所以參數不是json,是string,直接傳屬性名即可。
例如:獲取按鈕組件的標簽
alert(this.comp('stateBtn').get('label'));
### 2、增加和取消組件的事件(on和off)
組件提供了on方法用于添加事件處理器,提供了off方法用于取消事件處理器。
例如:給按鈕添加(取消)單擊事件
var Model = function() {
this.callParent();
this.clickEventFn;
};
Model.prototype.addEventBtnClick = function(event){
this.clickEventFn = function() {
alert("新增的單擊事件");
};
this.comp('button1').on('onClick',this.clickEventFn,this);
};
Model.prototype.delEventBtnClick = function(event){
this.comp('button1').off('onClick',this.clickEventFn,this);
};
上面可以增加的事件處理器是組件的on開頭的事件,如果要增加組件的其它事件,可以使用jQuery的on方法,例如:給input組件增加值改變添加監聽事件(oninput事件)
this.comp('input1').$domNode.on('input',function(){alert(this.value);});
其中
* this.comp(‘input1′)獲得組件的js對象
* this.comp(‘input1′).$domNode獲得組件的jQuery對象
## 4.2、私有方法
組件提供了很多方法,用于更靈活的使用它。在這些方法中,必須掌握的是data組件的方法,因為X5的組件是數據感知組件,只需針對數據進行編程即可。
data組件的常用方法(bizData組件繼承自data組件,因此方法相同)
* 新增、刪除行及保存數據 newData deleteData saveData
* 對列取值賦值 getValue setValue
* 設置過濾條件及刷新數據 setFilter refreshData
* 遍歷數據及數據查找 each find
* 獲取所有列名 getColumnIDs
* 獲取當前行 getCurrentRow getCurrentRowID
* 聚合函數 sum avg count max min
其它組件常用方法
* 打開彈出窗口:使用widowDialog組件open方法
* 彈出菜單:使用popMenu組件show方法
* 顯示流程圖:使用process組件showChart
# 5、組件的操作
將組件的常用方法和圖標icon、標題label組合為操作,在組件的單擊事件中關聯操作,就減少了寫js代碼調用組件方法的工作量,同時操作中的icon和label也會應用到組件上。例如:在按鈕的單擊事件onClick中選擇data組件的保存操作,按鈕將會使用保存操作設置的icon和label,省去了選擇icon和設置label的步驟,從而保證了系統的統一風格。

# 6、組件的事件
## 6.1、on開頭的事件(回調型事件)
on開頭的事件是組件特意提供的事件,在觸發和執行效率方面優于標準的dom事件。在操作組件和調用組件的方法時,會觸發相關事件。還特別提供了在onClick事件中綁定組件的操作,從而減少代碼量。
以data組件的兩個數據改變事件為例,說明事件的觸發和使用。data組件有兩個數據改變事件,分別是數據改變onValueChange事件和數據改變后onValueChanged事件。為什么要提供兩個事件呢?這兩個事件又有什么區別呢?
在修改數據時,首先觸發data組件的onValueChange事件,這個事件提供了本次修改的新舊值,提供了判斷新值是否合法的時機,新值如果不合法,可以通過重新設置新值,避免出現錯誤數據,之后觸發onValueChanged事件,在這個事件中可以得到修改后的值,進行其它的處理。
### 1、添加組件事件
如何添加data組件的onValueChange事件呢,選中data組件,將屬性編輯器切換到事件編輯器,找到onValueChange事件,在右側事件值的空白區域雙擊。
[](https://box.kancloud.cn/2015-09-22_5601598835f73.jpg)
此時UI設計器會從設計頁切換到js頁,并生成了新的事件方法。同時將新生成的事件方法名寫入事件值。
~~~
~~~
### 2、使用事件方法中的event參數
組件事件提供了event參數,它是一個json對象,其中包含在這個事件中需要用到的參數信息。
[](https://box.kancloud.cn/2015-09-22_560159897a097.jpg)
在事件方法中使用event參數
Model.prototype.mainDataValueChange = function(event){
alert('新值是'+event.newValue);
alert('原值是'+event.oldValue);
event.newValue = "";//新值不合法,清空輸入
};
### 3、event參數里面的三個常用的參數
* event.source:組件的js對象
* event.bindingContext:組件綁定的上下文,包含$model、$object等
* event.cancel:可修改,設置為true后中斷當前動作
## 6.2、bind開頭的事件(標準的dom事件)
* 標準事件,可向上冒泡。
* 使用event.currentTarget獲取組件的jQuery對象
# 7、組件的樣式
X5基于Bootstrap樣式,同時又定義了一些新的樣式,它們的區別是
* x-開頭的樣式是X5定義的樣式
* 其它開頭的樣式是Bootstrap原生樣式
[](https://box.kancloud.cn/2015-09-22_5601598aa2111.jpg)
## 7.1、自定義組件樣式
1. 在css文件中定義新的class
2. 在組件的class屬性中輸入新定義的class名稱
3. 如果定義在同名css文件(例如:當前是mainAcitivity.w,樣式定義在mainAcitivity.css)中,不用引用這個css文件,否則需要在js文件中引用css文件
## 7.2、修改系統樣式
X5使用單頁模式,在加載了新的樣式后,原來的同名樣式失效,為了避免樣式覆蓋,在修改系統樣式時,在系統class前面增加一個class,例如:form-control是系統樣式,重定義時定義為
.oa .form-control{
border: none;
box-shadow: none;
font-size:14px;
padding:8px 0px;
}
同時,在w文件的window組件的class屬性中加上oa,這個樣式就會在這個w文件上生效,不會影響其它使用form-control的w文件。
## 7.3、引用樣式文件
在js文件中,用下面第4行的寫法引用/UI2/OA/config/pub.css 文件
define(function(require) {
var $ = require("jquery");
var justep = require("$UI/system/lib/justep");
require("css!$UI/OA/config/pub").load();
# 8、組件的API
### 1、打開API文檔
API在studio中,可以通過菜單打開。點擊studio的菜單WeX5(BeX5),選擇API文檔,就打開了X5的API文檔。
### 2、查看組件API
在左側目錄中選擇UI2,再選擇COMPONENT,就列出了所有的組件,選中一個組件,右側就列出了該組件的API。分為屬性Properties、方法Methods、事件Events、常量Constants幾大類。點擊Properties列出組件的所有屬性,點擊Methods列出組件的所有方法,點擊Events列出組件的所有事件。
[](https://box.kancloud.cn/2015-09-22_5601598b18d31.jpg)
### 3、查看組件全部的API
component?**BizData?**extends?[Data](http://wex5.com/cn/Data.html)
注意API文檔中的這一句,說明BizData組件繼承自Data組件,意味著繼承了Data組件的所有屬性、方法和事件。因此在查看BizData組件的API時,不能只看BizData列出的這些API,還要打開Data組件,查看Data組件的API,
# 9、組件的調試
使用chrome瀏覽器的開發人員工具(按F12),進行調試
### 9.1、調試樣式
點放大鏡圖標,在頁面上點擊要查看樣式的組件,Elements頁中顯示出了這個組件的html代碼,Styles里面顯示出了這個組件的樣式,在這里修改即可直接看到效果。調整到滿意后,寫入css文件。
[](https://box.kancloud.cn/2015-09-22_5601598bcf952.jpg)
### 9.2、調試js代碼
在組件的事件中增加debugger;,刷新頁面后,觸發這個事件,就會停在debugger;上,此時,可以在Watch Expressions中查看變量的值,也可以在Console里面輸入變量回車,查看變量的值。
[](https://box.kancloud.cn/2015-09-22_5601598f200c8.jpg)
- 快速入門
- 第一個應用
- WeX5產品能力和技術
- wex5技術理念
- WeX5可以怎么玩?
- WeX5和BeX5比較
- UI2開發
- UI2前端框架基礎01:應用和頁面
- UI2框架基礎02:框架結構圖和目錄
- 組建基礎
- 編程基礎
- js引用
- css、text引用
- 設置資源依賴
- 代碼調試
- 數據組件
- Data組件基礎01:列、初始化加載狀態、行對象和游標
- Data組件基礎02:規則、數據遍歷查找
- Data組件基礎03:CRUD
- Data組件基礎04:Tree、主從數據、更新模式
- Data組件基礎05:再談Data組件新增,查詢,保存
- Data組件的JSON數據格式
- WeX5 & BeX5 頁面框架核心之數據綁定
- 數據綁定屬性系列
- 初識綁定
- visible綁定
- text綁定
- html綁定
- css綁定
- 頁面布局
- 頁面樣式
- 樣式基礎
- 添加自定義圖標(iconfont)
- 常用組件
- bar組件
- contents組件
- 前端路由和頁面跳轉
- 路由模塊
- 頁面跳轉
- 部署和發布
- 三種部署方式
- Web app部署
- UIServer的緩存機制
- 自定義組件開發
- 組件運行時開發案例
- 組件設計時開發案例
- 組件設計時開發參考
- 屬性編輯器配置和開發
- 自定義向導開發(waiting)
- 第三方庫集成
- 集成Echarts
- 集成百度和高德地圖
- App開發
- 打包
- App打包基礎和常見問題
- App打包原理和目錄結構
- App打包過程詳解
- App打包服務器環境搭建
- 蘋果證書申請 使用
- Android和IOS的本地應用圖標規范
- Android和IOS的本地App如何安裝(apk&ipa)
- 蘋果App部署HTTPS進行在線下載安裝
- 調試
- Android和IOS真機調試
- 插件
- 如何使用和擴展cordova插件
- cordova插件開發
- 常用cordovar插件
- SQLite插件
- 極光推送(JPush)插件
- 微信支付入門教程
- 微信、支付寶支付開發
- 服務端開發
- App與服務端交互原理
- 輕量級Baas(視頻)(文字) (.net版)
- Data組件的JSON數據格式11
- 微信服務號集成(視頻)
- 擴展學習資料
- bootstrap
- Knockoutjs
- JQuery
- requirejs
- phonegap/cordova