記一筆頁實現(xiàn)新增賬目、修改賬目的功能。編輯時下拉選擇賬目類型、賬目分類和日期;輸入金額和備注。用一個W文件實現(xiàn)。
1、新建頁面文件detail.w
在“新建W向?qū)А敝羞x擇模板“移動→標準→標準頁面”,文件名輸入detail。在頁面中將放入數(shù)據(jù)組件和展現(xiàn)組件,如圖1-29。
圖1-29 記一筆頁面構(gòu)成
2、增加賬目數(shù)據(jù)、賬目類型、賬目分類數(shù)據(jù)
記一筆頁實現(xiàn)新增、編輯賬目數(shù)據(jù),因此需要賬目數(shù)據(jù)組件。新增時,需要一條空數(shù)據(jù);編輯時,數(shù)據(jù)來自賬目列表頁,所以不需要調(diào)用后端服務(wù)獲取數(shù)據(jù)。
賬目類型和賬目分類都是下拉選擇的數(shù)據(jù),所以需要提供賬目類型數(shù)據(jù)和賬目分類數(shù)據(jù),用于下拉選擇。賬目類型分為收入和支出,是靜態(tài)數(shù)據(jù),因此使用data組件;賬目分類則需要使用數(shù)據(jù)組件baasData,通過調(diào)用后端服務(wù),獲取賬目分類表中的數(shù)據(jù)。表1-9列出了數(shù)據(jù)組件屬性的設(shè)置方法。
表1-9 記一筆頁數(shù)據(jù)組件屬性說明
組件 | 父組件 | 屬性 | 屬性值 | 說明 |
baasData | model | xid | accountData | 賬目數(shù)據(jù),從list.w中復(fù)制 |
autoLoad | false | 不自動加載數(shù)據(jù) | ||
autoNew | false | 不自動新增數(shù)據(jù) | ||
baasData | model | xid | classData | 賬目分類數(shù)據(jù) |
tableName | account_class | 單擊右側(cè)按鈕彈出選擇 | ||
idColumn | fID | 選擇后自動帶出 | ||
url | /justep/account | 選擇后自動帶出 | ||
queryAction | queryAccount_class | 選擇后自動帶出 | ||
autoLoad | false | 不自動加載數(shù)據(jù) | ||
autoNew | false | 不自動新增數(shù)據(jù) | ||
limit | -1 | 獲取全部賬目分類數(shù)據(jù) | ||
data | model | xid | typeData | 賬目類型數(shù)據(jù) |
增加fType(String)列,增加兩行數(shù)據(jù),分別是收入、支出 | ||||
idColumn | fType | 編輯列時設(shè)置主鍵列 | ||
autoLoad | true |
| ||
autoNew | false |
|
3、制作賬目明細表單
使用控件組組件controlGroup,作為輸入組件的容器,提供邊距,使組件不會緊貼著屏幕邊緣。使用帶標簽的下拉組件labelSelect,作為賬目類型和賬目分類的選擇組件。使用帶標簽的輸入組件labelInput,作為日期、金額和備注的輸入組件。界面設(shè)計如圖1-30.
圖1-30 記一筆頁設(shè)計界面
表1-10列出了展現(xiàn)組件屬性的設(shè)置方法。
表1-10 記一筆頁展現(xiàn)組件屬性說明
組件 | 父組件 | 屬性事件 | 值 | 說明 |
controlGroup | content1 | xid | controlGroup1 | 控件組 |
labelSelect | controlGroup1 | xid | labelSelect1 | 下拉選擇賬目類型 |
其中l(wèi)abel | labelSelect1 | bind-text | $model.accountData.label('fType') | 顯示列的顯示名稱 |
其中select | labelSelect1 | bind-ref | $model.accountData.ref('fType') | 綁定類型列 |
autoLoad | true | 第一次下拉時加載數(shù)據(jù) | ||
bind-options | typeData | 下拉數(shù)據(jù)關(guān)聯(lián)賬目類型數(shù)據(jù) | ||
bind-optionsValue | fType | 選擇后取fType列的值,寫入accountdata | ||
labelSelect | controlGroup1 | xid | labelSelect2 | 下拉選擇賬目分類 |
其中l(wèi)abel | labelSelect2 | bind-text | $model.accountData.label('fClass') | 顯示列的顯示名稱 |
其中select | labelSelect2 | bind-ref | $model.accountData.ref('fClass') | 綁定賬目分類列 |
autoLoad | true | 第一次下拉時加載數(shù)據(jù) | ||
bind-options | classData | 下拉數(shù)據(jù)關(guān)聯(lián)賬目分類數(shù)據(jù) | ||
bind-optionsValue | fClass | 選擇后取fClass列的值,寫入accountdata | ||
labelInput | controlGroup1 | xid | labelInput1 | 輸入日期 |
其中l(wèi)abel | labelInput1 | bind-text | $model.accountData.label('fDate') | 顯示列的顯示名稱 |
其中input | labelInput1 | bind-ref | $model.accountData.ref('fDate') | 綁定日期列 |
labelInput | controlGroup1 | xid | labelInput2 | 輸入金額 |
其中l(wèi)abel | labelInput2 | bind-text | $model.accountData.label('fMoney') | 顯示列的顯示名稱 |
其中input | labelInput2 | bind-ref | $model.accountData.ref('fMoney') | 綁定金額列 |
labelInput | controlGroup1 | xid | labelInput3 | 輸入備注 |
其中l(wèi)abel | labelInput3 | bind-text | $model.accountData.label('fDescription') | 顯示列的顯示名稱 |
其中input | labelInput3 | bind-ref | $model.accountData.ref('fDescription') | 綁定備注列 |
placeholder | 請輸入備注 | 輸入提示 | ||
button | titleBar1的right部分 | xid | okBtn | 確定按鈕 |
icon | icon-android-checkmark | 設(shè)置按鈕圖標 | ||
class | btn btn-link btn-only-icon | 設(shè)置按鈕樣式 | ||
onClick | okBtnClick | 將accountdata中的數(shù)據(jù)傳給賬目列表頁,關(guān)閉記一筆頁 |
4、賬目列表頁增加新增、修改、刪除賬目功能
在賬目列表頁中新增或修改賬目,需要跳轉(zhuǎn)到記一筆頁,這個頁面跳轉(zhuǎn)可以使用對話框組件windowDialog實現(xiàn)。windowDialog組件可以跳轉(zhuǎn)到指定的W文件。
(1)增加新增賬目功能
在賬目列表頁的“新增”按鈕的單擊事件中,調(diào)用windowDialog組件的open方法,打開記一筆頁的同時傳新增參數(shù),在記一筆頁中接收新增參數(shù),給賬目數(shù)據(jù)組件增加一條新記錄。在新記錄中輸入相關(guān)數(shù)據(jù)后,關(guān)閉記一筆頁面,返回賬目列表頁面。輸入的數(shù)據(jù)通過windowDialog組件返回到賬目列表數(shù)據(jù)中,再保存數(shù)據(jù)到數(shù)據(jù)庫。
在賬目列表頁面list.js中,打開記一筆頁面,代碼如下:
Model.prototype.newBtnClick = function(event) { // 打開記一筆新增
this.comp("detailDialog").open({
"params" : {
"operator": "new"
}
});
};
在記一筆頁面detail.js中接收參數(shù),發(fā)現(xiàn)如果是新增數(shù)據(jù)就增加新記錄,代碼如下:
Model.prototype.modelParamsReceive = function(event){ // 記一筆接收參數(shù)
var accountData = this.comp("accountData");
accountData.clear();
this.operator = event.params.operator;
if (this.operator== "new") { // 新增賬目數(shù)據(jù)
accountData.newData({
"defaultValues": [ {
"fID": justep.UUID.createUUID(),
"fCreateTime": new Date(),
"fDate": new Date(),
"fType": "支出"
} ]
});
}
};
用戶輸入數(shù)據(jù)后,關(guān)閉記一筆頁面detail.js,將用戶輸入的數(shù)據(jù)返回賬目列表頁。代碼如下:
Model.prototype.okBtnClick = function(event) {
// 確定后返回當(dāng)前行,用于windowDialog的mapping映射
var accountData = this.comp("accountData");
this.owner.send(accountData.getCurrentRow());
this.close();
};
在賬目列表頁面list.w中,設(shè)置記一筆頁面中要返回的數(shù)據(jù)和賬目列表頁面中的賬目數(shù)據(jù)字段的對應(yīng)關(guān)系,如圖1-31?!皬棾龃翱诟拍睢敝傅氖怯浺还P頁面中的賬目數(shù)據(jù),“目標概念”指的是賬目列表頁面中的賬目數(shù)據(jù)。
圖1-31 賬目列表頁中windowDialog組件的mapping屬性設(shè)置
在賬目列表頁面list.js中,接收記一筆頁面返回的數(shù)據(jù)后,將數(shù)據(jù)保存到數(shù)據(jù)庫。代碼如下:
Model.prototype.detailDialogReceived = function(event) {
this.comp("accountData").saveData(); // 從記一筆返回后保存數(shù)據(jù)
};
(2)增加編輯賬目功能
在賬目列表頁的list組件的第一列的單擊事件中,調(diào)用windowDialog組件的open方法,打開記一筆頁的同時傳編輯參數(shù)和賬目當(dāng)前行數(shù)據(jù),在記一筆頁中接收修改參數(shù),將賬目當(dāng)前行數(shù)據(jù)放入賬目數(shù)據(jù)組件中。數(shù)據(jù)的返回和保存同新增賬目功能。
在賬目列表頁面list.js中,打開記一筆頁面,同時將選擇的行數(shù)據(jù)傳入記一筆頁面。代碼如下:
Model.prototype.listLineClick = function(event) { // 打開記一筆編輯,傳入data當(dāng)前行數(shù)據(jù)
var row = event.bindingContext.$object;
this.comp("detailDialog").open({
"params" : {
"operator": "edit",
"data" : {
"rowData": row.toJson()
}
}
});
};
在記一筆頁面detail.js中接收參數(shù),發(fā)現(xiàn)如果是修改數(shù)據(jù)就將傳入的數(shù)據(jù)加載到賬目數(shù)據(jù)中,以便用戶修改,代碼如下:
Model.prototype.modelParamsReceive = function(event){ // 記一筆接收參數(shù)
var accountData = this.comp("accountData");
accountData.clear();
this.operator = event.params.operator;
if (this.operator== "edit") { // 修改賬目數(shù)據(jù)
accountData.loadData([event.params.data.rowData ]);
accountData.first();
}
};
(3)增加刪除賬目功能
在賬目列表頁list.js的list組件每一行上增加刪除按鈕,刪除list當(dāng)前行數(shù)據(jù)。代碼如下:
Model.prototype.deleteBtnClick = function(event) { // 刪除list當(dāng)前行
var data = this.comp("accountData");
var row = event.bindingContext.$object;
data.deleteData(row);
};
表1-11列出了賬目列表頁list.w展現(xiàn)組件屬性的設(shè)置方法。
表1-11 賬目列表頁展現(xiàn)組件屬性說明
組件 | 父組件 | 屬性事件 | 值 | 說明 |
windowDialog | window | xid | windowDialog1 | 對話框 |
src | ./detail.w | 右邊按鈕彈出選擇 | ||
mapping |
| 如圖1-31所示 | ||
onReceived | detailDialogReceived | 在mapping處理后觸發(fā),此時保存賬目數(shù)據(jù)至數(shù)據(jù)庫 | ||
button | titleBar1的right部分 | xid | newBtn | 新增賬目按鈕 |
icon | icon-android-add | 設(shè)置按鈕圖標 | ||
class | btn btn-link btn-only-icon | 設(shè)置按鈕樣式 | ||
onClick | newBtnClick | 打開記一筆頁新增賬目 | ||
col | row1 | xid | col1 | 用來放賬目信息的列 |
bind-click | listLineClick | 打開記一筆頁修改賬目 | ||
button | col2 | xid | deleteBtn | 刪除賬目按鈕 |
icon | icon-android-close | 設(shè)置按鈕圖標 | ||
class | btn btn-link btn-only-icon | 設(shè)置按鈕樣式 | ||
onClick | deleteBtnClick | 刪除list當(dāng)前行賬目 |
更多建議: