这是用户利用do_Gridview和do_ListView及其它组件绘制的日历和任务,基本实现一个完整的在线日程管理功能android
先看图,android和ios上的效果图以下:ios
咱们能够看到经过deviceone平台能够实现跨平台的复杂ui,咱们在IDE里能够看到用户拖拽了不少组件到设计区,经过设置属性,绑定数据动态变化日历里显示的日期。json
用户同时也使用do_Http组件从后台获取日程安排的数据,在手机上添加日程安排能够经过网络同步到服务端。api
代码封装在本身定义的js文件里:网络
var deviceone = require("deviceone"); var nf = deviceone.sm("do_Notification"); var cacher = deviceone.sm("do_DataCache"); var domain = "http://www.shenghuafood.com"; var access_token = ''; /** * API 地址定义 */ var api = { login: domain + '/user/token/login', articleView: domain + '/article/article/view', articleList: domain + '/article/article/index', calendarEvent: domain + '/calendar/event/events', }; /** * 正在加载UI */ var loading = function(id, y) { id = id || ''; y = y || 400; var root = deviceone.ui("$"); return deviceone.ui(root.add('loading_' + id, "source://view/common/loading.ui", 0, y)); } module.exports.loading = loading; /** * HTTP Post方法 */ var post = function(uri, data, success, error, progressbar) { var post = deviceone.mm('do_Http'); post.method = 'post'; post.timeout = 60000; post.contentType = 'application/json'; post.setRequestHeader("Accept", 'application/json'); post.setRequestHeader("X-Auth-Token", cacher.loadData("access_token")); post.url = api[uri]; post.body = data; if(progressbar) { progressbar.visible = true; } post.on("fail", function(data) { if(progressbar) { progressbar.visible = false; } if (typeof error == "function") { error(data); } else { nf.toast(data.message); } }).on("success", function(data) { if(progressbar) { progressbar.visible = false; } if (typeof success == "function") { success(data); } }); post.request(); }; module.exports.post = post; /** * HTTP Get方法 */ var get = function(uri, data, success, fail, progressbar) { var query = queryString(data); var get = deviceone.mm("do_Http"); get.method = "get"; get.timeout = "60000"; get.contentType = "application/json"; get.setRequestHeader('Accept', 'application/json'); get.setRequestHeader('X-Auth-Token', cacher.loadData('access_token')); get.url = api[uri] + '?' + query; if(progressbar) { progressbar.visible = true; } get.on("fail", function(data) { if(progressbar) { progressbar.visible = false; } if (typeof fail == "function") { fail(data); } }).on("success", function(data) { if(progressbar) { progressbar.visible = false; } if (typeof success == "function") { success(data); } }); get.request(); }; module.exports.get = get; /** * 对象转URL */ var queryString = function(obj, sep, eq, name) { sep = sep || '&'; eq = eq || '='; obj = obj === null ? undefined : obj; var Euc = encodeURIComponent; if (typeof obj === "object") return Object.keys(obj).map(function(k){ var ks = Euc(k) + eq; if (Array.isArray(obj[k])) return obj[k].map(function(v){ return ks + Euc(v) }).join(sep); else return ks + Euc(obj[k]); }).join(sep); if (!name) return ""; return Euc(name) + eq + Euc(obj); }; module.exports.queryString = queryString;