app开发之deviceone
deviceone,跨平台、低成本、纯原生的app开发服务,具体介绍见:http://www.deviceone.net/
do不同于dcloud、rn等开发套件,do只是一座桥梁,可以选择使用javascript or lua进行纯原生开发,开发后的app同时适配android、ios、winphone、桌面等平台,真正实现了跨平台原生开发的特点,开发出的app体验度也近乎原生,相比dcloud、rn等,似乎流畅度更好点。
1、do的主要特点
- 跨平台、纯原生
- 可以使用js开发,门槛较低
- 官方提供在线打包功能,目前不支持离线打包
- app界面开发完全拖拽实现,类似于java swing桌面开发或者c#桌面开发,布局快速
- 提供应用内升级
- 状态栏沉浸(不过还有bug)
- 组件丰富,目前官网大概110多种组件,基本全部兼容android、ios平台,部分windows平台
- 屏幕自动适配、数据绑定、模板复用
2、基本组件的使用方法:
简单介绍如下组件的基本使用方法,包括:
- do_Http(http请求组件)
- do_Storage(文件操作组件)
- do_Album(相册组件)
- do_Network(网络类)
- do_ImageBrowser(图片全屏预览组件)
- do_BaiduLocation(定位)
- do_WebView(webview)
- do_ListView(垂直多视图布局组件)
- do_SegmentView(tab视图组件)
do_Http:
基本的http请求实现,其中params为请求参数,一个json对象:
var http = deviceone.mm("do_Http");
http.method = "POST";
http.timeout = ;
http.contentType = "application/json";
http.setRequestHeader("tokenid", userinfo.getTokenId());
http.url = url;
http.body = params;
http.on("success", callback);
http.on("fail", callback);
http.request();
单文件上传:
var http = deviceone.mm("do_Http");
http.method = "POST";
http.timeout = ;
http.contentType = "audio/wav";
http.setRequestHeader("tokenid", userinfo.getTokenId());
http.url = url;
http.body = params;
http.on("success", rescallback);
http.on("fail", rescallback);
http.on("progress", progcallback);
http.upload(path, "file");
do_Storage
异步、同步读取文件:
var storage = sm("do_Storage");
var content = {};
// 同步读文件
content.key1 = storage.readFileSync("data://file1");
// 异步读文件
storage.readFile("data://file2", function(data, e) {
content.key2_k3 = data["k3"];
label.text = "在file/index.ui.js里读取file1和file2获取值\n"
+ JSON.stringify(content, null, );// 格式化
})
do_Album
从系统相册选择照片:
var album = sm("do_Album");
album.select(, , -, , true, function(data, e) {
deviceone.print(data[]);
})
album.select({maxCount:, width:, height:-, quality:, iscut:true}, function(data, e) {
deviceone.print(data[]);
})
保存图片到系统相册:
do_Album.save("data://" + img,img,function(dat,e){
nf.toast("已保存至系统相册");
});
do_Network
获取手机端网络信息:
var network = sm("do_Network");
network.getStatus(); //获取手机端当前处于的网络环境
network.getIP({}); //获取移动终端ip地址
network.getOperators({}); //当前设备使用的sim卡运营商
network.getMACAddress({}); //当前设备的MAC地址
do_ImageBrowser
var images = [ { source : "http://www.deviceone.net/img/01_05.png", init : "source://image/p/1.jpg" }, { source : "http://www.deviceone.net/img/02_05.png", init : "source://image/p/2.jpg" },
{ source : "http://www.deviceone.net/img/03_05.png", init : "source://image/p/3.jpg" }, { source : "http://www.deviceone.net/img/04_05.png", init : "source://image/p/4.jpg" },
{ source : "http://www.deviceone.net/img/05_05.png", init : "source://image/p/5.jpg" } ];
var imageBrowser = sm("do_ImageBrowser");
var bn_show = ui("bn_show");
bn_show.on("touch", function() {
/**
* @imageBrowser.show(data, index);
* @data : 数据集合
* @index : 首先显示的位置 : 第一个参数[数组] 的索引..
*/
imageBrowser.show(images, );
});
do_BaiduLocation
定位:
var nf = deviceone.sm("do_Notification");
var do_BaiduLocation = deviceone.sm("do_BaiduLocation");
do_BaiduLocation.locate("high", function(locationData) {
nf.alert(JSOn.stringify(locationData));
});
do_WebView
webview使用时直接指定一个页面html文件地址即可,在html内部,也可以使用deviceone:
var title = document.getElementById("title");
var author = document.getElementById("author");
var time = document.getElementById("time");
var content = document.getElementById("content");
window.onDeviceOneLoaded = function() {
var nf = sm("do_Notification");
var do_App = sm("do_App");
var do_Page = sm("do_Page");
var article = do_Page.getData();
title.innerHTML = article.title;
author.innerHTML = article.author;
time.innerHTML = getTime(article.createtime);
content.innerHTML = article.content;
do_Page.fire("jumpToArticle", article.id); //传入当前文章id,点赞的时候用
}
do_ListView
listview是一个竖直布局容器,可以指定多模板,如下设置:

模板之间使用,隔开,listview数据显示方法如下:
var listview = ui("listview");
var listdata = mm("do_ListData");
var d = [];
for (i = ; i < ; i++) {
d[i] = {};
d[i].name = (i + );
d[i].tag = i;
d[i].checked = false;
}
listdata.addData(d);
listview.bindItems(listdata);
首先声明一个do_ListData数据模型,用于和listview组件进行数据绑定,通过addData、bindItems方法可以直接实现数据绑定与模板渲染,这里子模板需设置下数据绑定:
var root = ui("$");
root.setMapping({
"index_label.text" : "name",
"do_CheckBox_1.checked" : "checked",
"do_CheckBox_1.tag":"tag"
});
listview组件绑定的listdata数据没发生一次改变,或者重新绑定一次数据后,子视图对应的显示也会随之变化,这里绑定暂时单向绑定;可以发现,一般直接把要显示的ui组件的属性作为模板数据传输,通过父组件的数据绑定实现页面视图的渲染。
除了do_ListData这种数组型结构之外,do还支持do_HashData这种hash类型数据绑定,每一项的数据比较随意,可以是任意数据类型,如果需要显示指定模板必须指定template:x,否则默认为模板0.
do_SegmentView
do_SegmentView的数据绑定类似listview,可以使用index属性直接指定某项选中效果。
3、do的应用内升级
/*******************************************************************************
* Author :and TimeStamp :2015-10-26
******************************************************************************/
var nf = sm("do_Notification");
var app = sm("do_App");
var storage = sm("do_Storage");
// //
var page = sm("do_Page");
var close = ui("close");
close.on("touch", function() {
app.closePage();
})
page.on("back", function(data) {
app.closePage();
})
// //
var button = ui("do_Button_1");
button.on("touch", function() {
upgrade();
}); function upgrade() {
// 获取当前应用的版本号
var current_version = storage.readFileSync("data://version.txt");
// 获取服务端最新的版本号,并下载升级
// 因为没有搭建一个真正的升级服务,所以先注释这一行且直接调用update方法
// getLatestVersion(current_version);
update("1.1", "data://update.zip"); } // 从服务器上获取最新的版本号
function getLatestVersion(ver) {
var http = mm("do_Http");
http.method = "GET";
http.url = "http://www.xxxx.com/getLatestVersion?current=" + ver; http.on("success", function(d) {
// 服务端判断最新的版本不等于当前的版本就会返回一个最新版本和下载地址,否则返回空
if (d) {
// 开始下载最新zip
download(d);
} else
nf.alert("当前版本已经是最新版本");
});
http.request();
} // 从服务器上获取最新的升级包
function download(d) {
var http = mm("do_Http");
var zip = "data://update.zip";
http.method = "POST";
// d.downlaodURL是zip的下载url,d.version是最新的版本号
http.url = d.downloadURL; http.on("success", function(d) {
update(d.version, zip);
});
http.download(zip);
}
// 解压,然后覆盖旧的文件,然后更新本地版本号
function update(ver, zip) {
storage.unzip(zip, "data://update", function(data) {
// 这里可以拷贝文件,也可以拷贝目录
app.update([ "data://update/test.ui", "data://update/test.ui.js" ],
"source://view", function() {
nf.alert("升级完成");
storage.writeFile("data://version.txt", "1.1",function(){
app.closePage();
});
});
})
}
do的具体学习可以去官网参考,还是比较容易上手的。。。
app开发之deviceone的更多相关文章
- web app开发之rem
CSS3新增了一个相对单位rem,官方的解释为“font size of the root element”,相对于根元素(html)的font size. rem,em,px单位的区别: rem单位 ...
- Hybrid App开发之JavaScript基础
前言: 前面学习了html和css的基本使用,今天开始学习JavaScript的使用. 什么是JavaScript JavaScript是一种基于对象(Object)和事件驱动(Event Drive ...
- Hybrid App开发之jQuery基础
前言: 前面学习了JavaScript/Html/Css的基础知识,今天学习一下常用js框架jQuery的使用进行快速的开发. JQuery的基本功能: 方位和操作DOM元素 控制页面样式 对页面事件 ...
- Hybrid App开发之jQuery选择器
前言: 前面学习了JQuery的简单使用,今天进一步学习一下JQuery的选择器. 什么是选择器? JQuery选择器通过标签名.属性名或者内容对DOM元素进行快速准确的选择,而不必担心浏览器的兼容性 ...
- Hybrid App开发之jQuery操作DOM
前言: 前面学习了JQuery的选择器,今天开始学习新的知识,JQuery操作DOM元素. 元素属性的访问与设置 attr(name) 获取元素属性 attr(name,value) 单个属性设置 a ...
- Hybrid App开发之css样式使用
前言: 前面学习了html,今天学习一下css的基本使用,看下html与css之间是如何结合来编写前端网页的. CSS 是什么? CSS 是 Cascading Style Sheets(级联样式表) ...
- Hybrid App开发之Html基本标签使用
前言: 前面简单学习了html简单标签的使用,今天学习一下其他的标签的使用. HTML的超链接 1.)创建一个超链接 <div> <p> <a href="ht ...
- qt-qml移动开发之在ios上开发和部署app流程简单介绍
qt5.3已经全面支持移动开发,除了mac,windows,linux.还支持ios,android,wp,meego等移动平台,本教程是作者依据自己的经验,从头讲怎么样在ios上公布自己的app.因 ...
- Android混合开发之WebViewJavascriptBridge实现JS与java安全交互
前言: 为了加快开发效率,目前公司一些功能使用H5开发,这里难免会用到Js与Java函数互相调用的问题,这个Android是提供了原生支持的,不过存在安全隐患,今天我们来学习一种安全方式来满足Js与j ...
随机推荐
- count distinct 多个字段 或者 count(*) 统计group by 结果
SELECT COUNT(*) FROM( SELECT 列名 FROM 表名 where ( 条件 )GROUP BY 多字段)临时表名 例如: SELECT COUNT(*) FROM(SELEC ...
- android之存储篇_SQLite数据库_让你彻底学会SQLite的使用
SQLite最大的特点是你可以把各种类型的数据保存到任何字段中,而不用关心字段声明的数据类型是什么. 例如:可以在Integer类型的字段中存放字符串,或者在布尔型字段中存放浮点数,或者在字符型字段中 ...
- css3 进度条
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>1 ...
- Android Studio 引入 Fresco
首选在build.gradle文件中配置 查看NDK路径 然后在gradle.properties文件中配置 ndk.path=C\:\\Users\\lixishuang\\AppData\\Loc ...
- oracle 游标使用大全
转:http://www.cnblogs.com/fjfzhkb/archive/2007/09/12/891031.html oracle的游标和例子! 游标-----内存中的一块区域,存放的是se ...
- [Chapter 3 Process]Practice 3.12 Including the initial parent process, how many processes are created by the program shown in Figure 3.32?
3.12 Including the initial parent process, how many processes are created by the program shown in Fi ...
- Intellij Idea 12 开发Android 报Caused by: java.lang.UnsatisfiedLinkError: FindLibrary return null;
这次开发是用的百度地图api,导入两个so文件,结果启动的时候总是报Caused by: java.lang.UnsatisfiedLinkError: findlibrary return null ...
- 张小龙《微信背后的产品观》之PPT完整文字版
微信回顾 433天,一亿用户 成为移动互联网的新入口 启动(2010年11月19日) 用户数突破1亿 1.0 1月26日 2.0 5月10日 语音对讲 2.5 8月3日 查看那附近的人 3.0 10月 ...
- mfc/格式转换
1.int型转为字符串型 int s = 123; CString str; str.Format("%d",s);
- centos安装 mysql
centos安装 mysql 1. 下载mysqlmysql被oracle收购后现在退出了企业版和社区版本,社区版本是开源的,企业版是收费的.社区版可以下载源码也可以下载二进制文件包.源码安装比较麻烦 ...