## Data組件基礎05:再談Data組件新增,查詢,保存
前面我們介紹了Data的數據新增,查詢,保存;接下來我們來看看怎么進行新增,查詢,保存邏輯的擴展;
Data上有onCustomNew、onCustomRefresh、onCustomSave事件,這幾個事件就是給開發者用于實現data的新增、查詢、保存邏輯的;看到這大家可能會產生疑問:“為什么需要這幾個事件,加載數據不是可以使用loadData嗎?保存也可以自己發ajax請求啊?”
有這些疑問很正常,開發者確實可以不需要這些事件來實現data的新增、查詢、保存邏輯,但是我們還是推薦使用onCustomNew、onCustomRefresh、onCustomSave事件重新實現;
原因是因為Data組件作為前端UI中的數據核心組件,很多組件都需要感知data的數據狀態,同時Data組件內部也維護著自己的狀態;當跳出data現有機制和接口很有可能其他關聯的組件就失去了與之關聯感知的能力,同時data自身提供的新增、查詢、保存操作也無法使用開發者擴展的邏輯。例如:如果加載數據開發者自己使用loadData加載,最簡單的mobile中scrollView組件上拉加載數據能力就無法感知擴展的邏輯。
下面通過一個具體的案例來講解onCustomNew、onCustomRefresh、onCustomSave事件擴展新增、查詢、保存邏輯
首先我們新建一個.w,在.w中放入data組件(注意:不是BizData組件),定義列FID、fString、fInteger、fFloat,
增加data的onCustomRefresh,由于接管了onCustomRefresh事件,autoLoad=true自動會使用新的邏輯加載數據
代碼如下:
//數據刷新接管實現
Model.prototype.masterDataCustomRefresh = function(event){
/*
event包含
{
"source" : 組件的js對象,
"cancel" : 可修改,設置為true后中斷當前刷新動作,
"limit" : 頁大小,
"offset" : 偏移,
"options" : 刷新給入的參數
}
*/
//這里簡單演示從datas.json文件中取數據,還可以傳遞limit、offset實現分頁的邏輯
var masterData = event.source;
$.ajax({
type: "GET",
url: require.toUrl('./datas.json'),
dataType: 'json',
async: false,//使用同步方式,目前data組件有同步依賴
cache: false,
success: function(data){
masterData.loadData(data);//將返回的數據加載到data組件
},
error: function(){
throw justep.Error.create("加載數據失敗");
}
});
};
增加data的onCustomSave
代碼如下:
//接管保存邏輯,這里將修改的數據送到服務端save.j,保存為save.json文件
Model.prototype.masterDataCustomSave = function(event){
/*
event包含
{
"source" : 組件的js對象,
"cancel" : 可修改,設置為true后中斷當前保存動作
"options" : 保存時給入的參數
}
*/
var masterData = event.source;
$.ajax({
type: "POST",
url: require.toUrl('./save.j'),
contentType: 'application/json',
async: false,
cache: false,
data: JSON.stringify(masterData.toJson(true)),//序列化data修改的數據
success: function(data){
masterData.applyUpdates();//更新數據狀態
},
error: function(){
throw justep.Error.create("保存數據失敗");
}
});
};
針對保存服務端新增“save.j”,實現數據保存
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.justep.filesystem.FileSystemWrapper;
import com.justep.ui.JavaServer;
//簡單實現數據保存,把修改的數據存入文件save.json
public class Save extends com.justep.ui.impl.JProcessorImpl {
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String fileName = FileSystemWrapper.instance().getRealPath(
"/UI2/system/components/justep/data/demo/save.json");
File outFile = new File(fileName);
OutputStream ro = new FileOutputStream(outFile);
String postData = JavaServer.getPostData(request);
byte[] b = postData.getBytes("UTF-8");
ro.write(b);
ro.flush();
ro.close();
}
}
增加data的onCustomNew
代碼如下:
//接管新增邏輯,簡單使用new.json文件返回新增數據,還可以根據給入的默認值實現新增的數據默認值處理
Model.prototype.masterDataCustomNew = function(event){
/*
event包含
{
"source" : 組件的js對象,
"option" : 新增時傳入的option參數,包括:parent,defaultValues
"data" : 行數據對象數組[{sName:'LiMing',sAge:18},...],數組的length決定新增的行數
data格式:
[
{
"列名" : 默認值,
"列名" : 默認值,
...
},
...
]
}
*/
$.ajax({
type: "GET",
url: require.toUrl('./new.json'),
dataType: 'json',
async: false,
cache: false,
success: function(data){
event.data = data;
},
error: function(){
throw justep.Error.create("新增數據失敗");
}
});
};
到這里我們就簡單實現了data的查詢、新增、保存
源碼:[demo.zip](http://wex5.com/cn/wp-content/uploads/2015/06/demo.zip)—–解壓后放入/UI2/system/components/justep/data/demo目錄
- 快速入門
- 第一個應用
- 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