启动服务

将app程序寄宿在计算机上,在计算机上调试:访问服务地址,将appToken值复制一下

在浏览器输入192.168.2.102:3000/appToken的值/文件路径后即可调试

入口文件

项目必须有一个放在根目录下的入口页面,否则在手机上无法进入app模块。比如在根目录下放一个appcan页面,命名为Login,然后在config.xml配置文件中注册(右击xml - 以xml方式打开)

<content encoding="utf-8" src="login.html" />

文件结构

常用文件

<link rel="stylesheet" href="css/fonts/font-awesome.min.css">
<link rel="stylesheet" href="css/ui-box.css">
<link rel="stylesheet" href="css/ui-base.css">
<link rel="stylesheet" href="css/ui-color.css">
<link rel="stylesheet" href="css/appcan.icon.css">
<link rel="stylesheet" href="css/appcan.control.css">
<link rel="stylesheet" href="css/xy.css">

<script src="js/appcan.js"></script>
<script src="js/appcan.control.js"></script>
<script src="js/pc.js"></script>
<script src="js/base.js"></script>
<script src="js/ec.js"></script>
<script src="js/uf.js"></script>
<script src="js/login.js"></script>

配置文件

具体配置,可参考官方文档。注意,使用外面的插件时,需要注册。

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<widget appId="test1001" channelCode="0000" height="480" pid="" sreensize="4.5" version="00.00.0000" viewmode="application" widgetId="" width="320">
     <name>测试App</name>
     <description/>
     <author email=""/>
     <icon src="icon.png"/>
     <license href=""/>
     <content encoding="utf-8" src="MyLogin.html"/>
     <updateurl/>
     <logserverip/>
     <showmyspace>false</showmyspace>
     <obfuscation>true</obfuscation>
     <bgcolor>#fefefe</bgcolor>
     <orientation>1</orientation>
     <debug>true</debug>
     <!--极光推送配置-->
     <config desc="uexJPush" type="KEY">
          <param name="$UEXJPUSH_PACKAGE$" platform="Android" value="com.xuyong.xyzls.worker"/>
          <param name="$UEXJPUSH_APPKEY$" platform="Android" value="303759edfd226f8e5dd4fe80"/>
          <param file="uexGroupfolder/PushConfig.plist" name="$UEXJPUSH_APP_KEY$" platform="iOS" value="303759edfd226f8e5dd4fe80"/>
          <param file="uexGroupfolder/PushConfig.plist" name="$UEXJPUSH_PUSH_CHANNEL$" platform="iOS" value="c1"/>
          <param file="uexGroupfolder/PushConfig.plist" name="$UEXJPUSH_APS_ENVIRONMENT$" platform="iOS" value="0"/>
     </config>
     <!--百度地图配置-->
     <config desc="uexBaiduMap" type="KEY">
          <param name="$uexBaiduMap_APIKey$" platform="Android" value="mncGL5qjo78HImOXDPcaWtHPdPBATVbz"/>
          <param name="$uexBaiduMap_APIKey$" platform="iOS" value="iXfGyztf4xnUv4pmMBuq5LkPyzC8c3xP"/>
     </config>
     <partobfuscation/>
     <webapp/>
     <!--分享功能白名单-->
     <config desc="whiteList" type="AUTHORITY">
          <permission info="urlSchemeWhiteList" platform="iOS">
               <string>wechat</string>
               <string>weixin</string>
               <string>mqzoneopensdk</string>
               <string>mqzoneopensdkapi</string>
               <string>mqzoneopensdkapi19</string>
               <string>mqzoneopensdkapiV2</string>
               <string>mqqOpensdkSSoLogin</string>
               <string>mqqopensdkapiV2</string>
               <string>mqqopensdkapiV3</string>
               <string>wtloginmqq2</string>
               <string>mqqapi</string>
               <string>mqqwpa</string>
               <string>mqzone</string>
               <string>mqq</string>
          </permission>
     </config>
</widget>

创建Html页面(appcan页面)

这会生成两个文件,一个是框架文件,一个是嵌入框架的子文件。框架文件只显示一个标题栏,如图

子文件是具体的内容区域,如图的Login_content.html

盒子布局

传统的流式布局是指父容器的大小由子元素所决定,而盒子模型是指将其他元素放入盒子后,其他元素的大小、布局方式都统一交给盒子来分配掌控。

ub

使子元素横向排列

<style>
    #box {background: red; color: white; }
    .child1 {background: #8F5219; }
    .child2 {background: #008FF5; }
    .child3 { background: #9BA22D; }
</style>
<body class="um-vp bc-bg" ontouchstart>
    <div id="page_你的文件路径名" class="up ub ub-ver bc-bg" tabindex="0">
        <!--content开始-->
        <div id="id_content" class="ub-f1 tx-l">
            <div class="ub" id="box">
                <div class="child1">1</div>
                <div class="child2">2</div>
                <div class="child3">3</div>
            </div>
        </div>
        <!--content结束-->
    </div>
</body>

ub-ver

使子元素纵向排列

ub-f1

计算其它元素所占用的空间大小,将剩余空间分配给当前元素。

如果多个元素都使用了ub-f1,则将剩余空间划分成均等的份,每个元素占一份。

ub-f2、ub-f3、ub-f4,数字表示份数,数字越大占用空间越大。

横向分配:
<style>
    #box{background: red;color:white;}
    .child1{background:#8F5219;}
    .child2{background:#008FF5;}
    .child3{background:#9BA22D;}
</style>
<body class="um-vp bc-bg" ontouchstart>
    <div id="page_你的文件路径名" class="up ub ub-ver bc-bg" tabindex="0">
        <!--content开始-->
        <div id="id_content" class="ub-f1 tx-l">
            <div class="ub" id="box">
                <div class="child1 ub-f">1</div>
                <div class="child2 ub-f1">2</div>
                <div class="child3">3</div>
            </div>
        </div>
        <!--content结束-->
    </div>
</body>

纵向分配
<body class="um-vp bc-bg" ontouchstart>
    <div id="page_你的文件路径名" class="up ub ub-ver bc-bg" tabindex="0">
        <!--content开始-->
        <div id="id_content" class="ub-f1 tx-l">
            <div class="ub ub-ver" id="box" style="height:13em;"> //由于div默认宽度是和浏览器一样宽,但高度默认是按照div所包含的文本、子元素来决定,所以此处需要手动设定盒子的高度才能看出ub-fx的效果
                <div class="child1 ub-f">1</div>
                <div class="child2 ub-f1">2</div>
                <div class="child3">3</div>
            </div>
        </div>
        <!--content结束-->
    </div>
</body>

up

使当前元素完全占满盒子

<body class="um-vp bc-bg" ontouchstart>
    <div id="page_你的文件路径名" class="up ub ub-ver" tabindex="0">
        <!--content开始-->
        <div class="child1 up" style="height:3em;">1</div>
        <!--content结束-->
    </div>
</body>

常用方法

appcan.frame.open()

将参数指定的目标页面嵌入到当前页面中

//框架页载入子页面的代码:如mylogin_content.html时mylogin.html的子页面
appcan.ready(function () {
    var titHeight = $('#header').offset().height;
    appcan.frame.open("content", "mylogin_content.html", 0, titHeight);
    window.onorientationchange = window.onresize = function () {
        appcan.frame.resize("content", 0, titHeight);
    }
});

b.show()

用参数指定的目标页面替换当前页面,需要引入公司的js文件,参数3可指定要向目标页传递的数据

/*打开目标页并传参/*
/*在login_content.html页面*/
var obj = { name: "sam" }; /*定义需要跨页传递的数据*/
b.click("#Btn", function () {
    /*打开参数路径指定的页面*/
    b.show("home.html", "winpage_home", { //页面、页面的body下的第一个div(包含所有元素的div)的id,一般格式如:page_winpage_editUser_content

data: obj /*传递的参数*/
    });
});
/*在home.html中获取参数*/
var fromLoginPageData = b.geturlparam();
var name = fromLoginPageData.data.name;
alert(name);
/*home页面向home._content页面传递数据也是同样的写法*/

appcan.window.alert()

弹出确认对话框

appcan.window.alert({
    title: "提醒",
    content: "表单未填完整",
    buttons: '确定',
    callback: function (err, data, dataType, optId) {

}
});

b.click()

点击事件,类似的有b.long.click()

b.click("#submit", function () {//可以访问this})

b.close()

回退到上一个页面,等同于appcan.window.close(-1);

每个框架页都有回退按钮,需要自己手动设置,具体是在Header部分添加一个div按钮,如:

<!--header开始-->
<div id="header" class="uh bc-text-head ub bc-head">
    <div class="nav-btn" id="nav-left">
        <div class="fa fa-angle-left fa-2x"></div>
    </div>
    <h1 class="ut ub-f1 ulev-3 ut-s tx-c" tabindex="0">登录</h1>
    <div class="nav-btn nav-bt" id="nav-right"></div>
</div>
<!--header结束-->

b.click(".nav-btn", function () {
    b.close(); //可以访问this
});

常用样式

缩小元素

设置左右边距可以缩小元素

.inputBox, #submit {
    margin-top: 1em;
    margin-left:0.5em;
    margin-right:0.5em;
}

设置圆角

#submit{
    border-radius: 3em;
}

圆形按钮

#raBtn {
    width: 12em;
    height: 12em;
    border-radius: 50%;
}
<div class="ub ub-ac ub-pc">
    <div class="btn/*删掉btn,否则是椭圆*/ ub ub-ac bc-text-head ub-pc bc-btn" id="raBtn">
        click
    </div>
</div>

列表

需要引入

<link rel="stylesheet" href="css/xy.css">
<link rel="stylesheet" href="css/res/xy-ecbs.css">
<script src="js/appcan.listview.js"></script>
<script src="js/ec.js"></script>

选择列表控件,这会在页面插入一个列表div,接着需要创建列表对象

var list = ec.listview({
    selector: "#MylistBox", //插入页面的列表元素的id
    type: "thickLine", //复杂列表 简单列表:thinLine
    dataType: "local", //本地数据源
    logoSize: 1.5,
    hasSubTitle: true, //右侧是否显示文本
    subTitleCss: "setFont", //右侧文本的额css类名
    logoCss: "setLogo",       
    titleCss: "setFont", //左侧文本的css类名
    data: [{
        id: 1,
        logo: "fa-user",
        title: "leo",
        subTitle: "023789"
    },
    {
        id: 2,
        logo: "fa-user",
        title: "tim",
        subTitle: "90950"
    }],
    events: {
        click: function (el, data) {
            b.show("ResetUser.html", "winpage_ResetUser", {
                data: data
            });
        }
    }
});

复杂列表只是在左侧和右侧文本下方多出了说明性文本

title : "leo",
describe: "用户名",
subTitle : "023789",
subDescribe: "电话号码",

编码约定

框架页约定

在body之下,所有编码的html都应包含在以下的红色div中,注意下面的id_header,如果你是按模板创建的登陆界面,不要修改模板生成的id,其它空白页应按照这个约定来设定id,id_xx。

<div id="page_你的文件路径名" class="up ub ub-ver bc-bg" tabindex="0">
        
    <!--header开始-->
    <div id="header" class="uh bc-text-head ub bc-head">
        <!--header左部开始-->
        <div class="nav-btn" id="nav-left">
            <div class="fa fa-angle-left fa-2x"></div><!--回退按钮-->
        </div>
        <!--header左部结束-->
        <!--header中部开始-->
        <h1 class="ut ub-f1 ulev-3 ut-s tx-c" tabindex="0">登录</h1>
        <!--header中部结束-->
        <!--header右部开始-->
        <div class="nav-btn nav-bt" id="nav-right">
            <div class="fa fa-gear fa-1x"></div> <!--设置按钮-->
        </div>
        <!--header右部结束-->
    </div>
    <!--header结束-->

<!--content开始-->
    <div id="id_content" class="ub-f1 tx-l"></div>        
    <!--content结束-->

<!--footer开始-->
    <div id="id_footer"></div>
    <!--footer结束-->

</div>

子页面约定

在body之下,所有编码的html都应包含在以下的红色div中

<div id="page_你的文件路径名" class="up ub ub-ver bc-bg" tabindex="0">
    <!--content开始-->
    <div id="id_content" class="ub-f1 tx-l">
    </div>
    <!--content结束-->
</div>

Js约定

框架页的js区域约定

/*
描述:xxx
作者:寒食
日期:2018-4-14
*/

/******************************定义当前页面全局变量************************************/
/*后台地址*/
var str_url = "";
/*其它变量*/
var str_windowName = "winpage_mylogin";
var str_frameName = "winpage_mylogin_content";
var json_params = b.geturlparams();

/******************************相关插件及其他设置的初始化*******************************/
appcan.ready(function() {
    b.showframe("mylogin_content.html", str_frameName, json_params);
});

/******************************控件定义代码段************************************/
//比如new出列表控件等,最好将创建控件的代码封装到函数中,将函数调用放在appcan.ready方法中

/******************************自定义方法代码段************************************/

/******************************给页面按钮注册事件******************************************/
b.click(".nav-btn", function() {
    b.close();
});

子页面的js区域约定

/*
描述:xxx
作者:寒食
日期:2018-4-14
*/
/******************************定义当前页面全局变量************************************/
/*后台地址*/
var str_url = "";
/*其它变量*/

/******************************相关插件及其他设置的初始化*******************************/
appcan.ready(function () {

});

/******************************控件定义代码段************************************/

/******************************自定义方法代码段************************************/

/******************************给页面按钮注册事件******************************************/

变量约定

变量的类型做前缀,如:str_name、int_id、dt_time、json_data、array_list、bool_isTrue、el_div,不是前面约定的类型则使用obj_obj

快捷键

Ctrl+Shift+F:格式化代码

Ctrl+Shift+/:注释

Ctrl+/:取消注释

在visual studio中编码

获取后端数据

pc.js是公司封装的代码,具体如下:

/*项目配置信息文件 ,打包时请修改*/
var pc = {
    namespace : "pc",
    /*当前的环境(1:开发环境,2:测试环境,3:正式环境)*/
    SIPTYPE : 2,
    /*服务器地址*/
    SIP : "",
    /*服务端名称空间*/
    SNS : "BLL.YS.API_APP_WORKER",) {
            //开发环境地址
            pc.SIP = "http://192.168.1.12:4012/Dynamic/Dynamic.ashx";

} else if (pc.SIPTYPE == 2) {
            //测试环境地址
            pc.SIP = "http://192.168.1.27:4012/Dynamic/Dynamic.ashx";

} else if (pc.SIPTYPE == 3) {
            //正式环境地址
            pc.SIP = "http://192.168.1.27:4012/Dynamic/Dynamic.ashx";
        }
    },

封装的ajax方法

b.ajax(pc.SIP, {
    action: "Task.GetJoinTaskInfo",
    param1:"",
}, function (state, obj) {
    state == true ? alert(obj.data) : alert('error');
});

不用以上方法,则直接使用appcan提供的ajax方法

创建一个空web项目,创建一般处理程序:

namespace appProServic
{
    public class MyHttpHandler : IHttpHandler
    {
        public void ProcessRequest( HttpContext context )
        {
            context.Response.ContentType = "text/plain";
            context.Response.Write( "{data:'hello'}");
        }
    }
}
<system.webServer>
     <httpProtocol>
          <customHeaders>
               <add name="Access-Control-Allow-Origin" value="*" />
               <add name="Access-Control-Allow-Headers" value="*" />
               <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE" />
          </customHeaders>
     </httpProtocol>
</system.webServer>
appcan.ajax({
    url: 'http://192.168.1.4:8080/myHttpHandler.ashx',
    type: 'GET',
    data: {
        param1: ''             
    },
    success: function (data) { //注意此处只有一个参数,而公司封装的ajax其success有两个参数
        var json_obj = eval("(" + data + ")");
        alert(json_obj.data);
    },
    error: function (e) {
        alert(e);
    }
});

上下拉刷新

在子页面编码即可。下拉是重新装载数据,上拉是追加数据。bounce刷新、resetbounce重置刷新。

appcan.ready(function () {
    var setBounce = function () {
        setTimeout(function () { b.resetbounce(); }, 2000); //2秒重置,否则会一直显示刷新的提示文字
    }
    b.bounce({
        top: function () { setBounce(); },
        bottom: function () { setBounce();  }
    });
});

Ajax上下拉刷新的例子

下拉时应刷新listView,页码永远是0,而上拉则追加数据到listView,页码变换

var list = null;
var pageIndex = 0; //页码
appcan.ready(function () {
    GetData(pageIndex);
    //上下拉刷新
    var setBounce = function () {
        setTimeout(function () {
            b.resetbounce()
        }, 200);
    }
    b.bounce({
        top: function () {
            setBounce();
            pageIndex = 0;
            GetData(pageIndex, true)
        },
        bottom: function () { setBounce(); GetData(++pageIndex); }
    })
});
  
function GetData(pageIndex, refresh) {
    alert(pageIndex);
    //下拉,清空列表
    if (refresh) {
        list = null;
        $("#listview").empty();
    }
    appcan.ajax({
        url: "http://192.168.2.103:8080/myhttphandler.ashx",
        type: "GET",
        data: {
            start: pageIndex,
            limit: 10, //每页显示记录条数
        },
        success: function (obj) {            
            var json = eval("(" + obj + ")");              
            list = new ec.listview({
                selector: "#listview",
                type: "thickLine",
                logoSize: 1.5,
                dataType: "local",
                hasSubTitle: true,
                data: json
            });               
        },
        error: function (e) {
                
        }
    });
}

如果在手机上调试Ajax参数,可将服务程序寄宿到IIS托管,然后以管理员身份运行visual studio,然后断点,编译,附加到进程进行调试,手机访问pc的ip地址,也要注意先关闭防火墙,否则手机端无法访问服务程序,服务程序如下:

public class MyHttpHandler : IHttpHandler
{
    public void ProcessRequest( HttpContext context )
    {
        var response = context.Response;
        var request = context.Request;
        response.ContentType = "text/plain";
        var pageIndex = request["start"] == "0" ? 0 : Convert.ToInt32( request["start"] );
        var limit = Convert.ToInt32( request["limit"] );
        dynamic[] dynamics =
        {
            new { id =1,logo="fa-user",title="leo",subTitle="1001000"},
            new { id =2,logo="fa-user",title="sam",subTitle="2001033"},
            new { id =3,logo="fa-user",title="korn",subTitle="38974729"},
            new { id =4,logo="fa-user",title="tim",subTitle="94371923"},
            new { id =5,logo="fa-user",title="leo",subTitle="1001000"},
            new { id =6,logo="fa-user",title="michael",subTitle="4533536"},
            new { id =7,logo="fa-user",title="Jerry",subTitle="56565"},
            new { id =8,logo="fa-user",title="abelard",subTitle="94375641923"},
            new { id =9,logo="fa-user",title="adrian",subTitle="36656"},
            new { id =10,logo="fa-user",title="aaron",subTitle="89755"},

//第二页
            new { id =11,logo="fa-user",title="xx",subTitle="1001000"},
            new { id =12,logo="fa-user",title="xxx",subTitle="2001033"},
            new { id =13,logo="fa-user",title="xxxx",subTitle="38974729"},
            new { id =14,logo="fa-user",title="xxxxx",subTitle="94371923"},
            new { id =15,logo="fa-user",title="xxxxxx",subTitle="1001000"},
            new { id =16,logo="fa-user",title="xxxxxxxx",subTitle="4533536"},
            new { id =17,logo="fa-user",title="xxxxxxxxx",subTitle="56565"},
            new { id =18,logo="fa-user",title="xxxxxxxxxx",subTitle="94375641923"},
            new { id =19,logo="fa-user",title="xxxxxxxxxxx",subTitle="36656"},
            new { id =20,logo="fa-user",title="xxxxxxxxxxxxx",subTitle="89755"},

//第三页
            new { id =21,logo="fa-user",title="yy",subTitle="346475567"},
            new { id =22,logo="fa-user",title="yyyy",subTitle="2001877033"},
            new { id =23,logo="fa-user",title="yyyyyyyy",subTitle="43454"},
            new { id =24,logo="fa-user",title="yyyyyyyyyyyy",subTitle="94371567576923"},
            new { id =25,logo="fa-user",title="yyyyyyyyyyyyyy",subTitle="224756"},
            new { id =26,logo="fa-user",title="yyyyyyyyyyyyyyyyyy",subTitle="4533787788536"},
            new { id =27,logo="fa-user",title="yyyyyyyyyyyyyyyyyyyy",subTitle="4565675687"},
            new { id =28,logo="fa-user",title="yyyyyyyyyyyyyyyyyyyyyyyy",subTitle="94375641676923"},
            new { id =29,logo="fa-user",title="yyyyyyyyyyyyyyyyyyyyyyyy",subTitle="24357687"},
            new { id =30,logo="fa-user",title="yyyyyyyyyyyyyyyyyyyyyyyyyyy",subTitle="5657687"},
        };

var list = dynamics.Skip( pageIndex * limit ).Take( limit );
        string json = JsonConvert.SerializeObject( list );
        response.Write( json );
        response.End( );
    }

public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

插件

appcan官方提供的插件不需要再配置文件中配置,但调用外部app功能的插件属于第三方插件,这些插件已经集成到打包平台,如果你要在项目中使用百度地图、微信登陆、极光推送、支付宝付款等外部功能,则需要先注册对应的开放平台,然后获取appkey,将key配置在config.xml文件中,然后在打包平台(appcan sdk移动应用开发系统)打包时选择已经为你列出的插件列表即可。

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<widget appId="test1001" channelCode="0000" height="480" pid="" sreensize="4.5" version="00.00.0000" viewmode="application" widgetId="" width="320">
     <name>寒食-Ajax</name> <!--app名称-->
     <description/>
     <author email=""/>
     <icon src="icon.png"/><!--app的logo-->
     <license href=""/>
     <content encoding="utf-8" src="index.html"/><!--app入口页面-->
     <updateurl/>
     <logserverip/>
     <showmyspace>false</showmyspace>3
     <obfuscation>true</obfuscation>
     <bgcolor>#fefefe</bgcolor>
     <orientation>1</orientation>
     <debug>true</debug>
     <!--项目用到的插件,比如QQ、微信分享、百度地图、极光推送等的功能必须在此处配置,调用插件的功能可参考appcan文档左侧菜单 - 第三方SDK-->
     <!--极光推送配置-->
     <config desc="uexJPush" type="KEY">
          <param name="$UEXJPUSH_PACKAGE$" platform="Android" value="com.xuyong.xyzls.worker"/><!--程序包名称-->
          <param name="$UEXJPUSH_APPKEY$" platform="Android" value="303759edfd226f8e5dd4fe80"/>
          <param file="uexGroupfolder/PushConfig.plist" name="$UEXJPUSH_APP_KEY$" platform="iOS" value="303759edfd226f8e5dd4fe80"/>
          <param file="uexGroupfolder/PushConfig.plist" name="$UEXJPUSH_PUSH_CHANNEL$" platform="iOS" value="c1"/>
          <param file="uexGroupfolder/PushConfig.plist" name="$UEXJPUSH_APS_ENVIRONMENT$" platform="iOS" value="0"/>
     </config>
     <!--百度地图配置--><!--需要在web上注册账户再申请appkey,最后将appkey粘贴到此处即可-->
     <config desc="uexBaiduMap" type="KEY">
          <param name="$uexBaiduMap_APIKey$" platform="Android" value="mncGL5qjo78HImOXDPcaWtHPdPBATVbz"/>
          <param name="$uexBaiduMap_APIKey$" platform="iOS" value="iXfGyztf4xnUv4pmMBuq5LkPyzC8c3xP"/>
     </config>
     <partobfuscation/>
     <webapp/>
     <!--针对ios的分享、调用外部app的功能,这需要一个白名单-->
     <config desc="whiteList" type="AUTHORITY">
          <permission info="urlSchemeWhiteList" platform="iOS">
               <string>wechat</string>
               <string>weixin</string>
               <string>mqzoneopensdk</string>
               <string>mqzoneopensdkapi</string>
               <string>mqzoneopensdkapi19</string>
               <string>mqzoneopensdkapiV2</string>
               <string>mqqOpensdkSSoLogin</string>
               <string>mqqopensdkapiV2</string>
               <string>mqqopensdkapiV3</string>
               <string>wtloginmqq2</string>
               <string>mqqapi</string>
               <string>mqqwpa</string>
               <string>mqzone</string>
               <string>mqq</string>
          </permission>
     </config>
</widget>

打包

登陆appcan sdk移动应用开发系统,应用管理 - 管理 - 软件版本管理 -  hybrid打包:

图标设置、状态栏设置、启动页设置:略

引擎选择:对插件进行手机适配、默认即可

插件选择:选择平台提供的封装好的第三方插件

开关设置:默认即可

  

AppCan的更多相关文章

  1. APPCAN开发笔记:html页面之间的参数传递:使用js获取url中的参数,以及在APPCAN中不能使用的解决方法

    用PHP的GET/POST方式来传递方式已经是司空见惯了,但是如果我的页面是一个静态的html的页面,想传递参数的时候要怎么办呢?在APPCAN的开发中我们会经常遇到这样的问题,因为所有的页面都是静态 ...

  2. AppCan学习笔记----关闭页面listview动态加载数据

    AppCan页面关闭 AppCan 的页面是由两个HTML组成,如果要完全关闭的话需要在主HTML eg.index.html中关闭,关闭方法:appcan.window.close(-1); 管道 ...

  3. AppCan学习笔记----Request和登录功能简单实现

    appcan.ajax(options) 实现appcan中网络数据的上传和获取 发起一个ajax请求,并获取相应的内容 常用参数 options.type: 请求的类型,包括GET.POST等 op ...

  4. AppCan学习笔记--数据存储及listview简单应用

    AppCan AppCan开发平台简介 AppCan是Hybrid App开发框架即混合开发框架,有官方提供底层功能使用API HTML5和JavaScript只是作为一种解析语言,真正调用的都是Na ...

  5. AppCan JSSDK模块扩展

    1.      从源码开始: 我们先看源码的8188行到9525行: window.appcan && appcan.define('window',function($,export ...

  6. 学习记录之APPCan

    2015年5月28的笔记,整理笔记搬了过来,好坏是自己当时的小成果,以后有想法继续补充 APPCan移动开发服务平台,有内置模板,列表样式,主页样式等供选择,适合开发简单布局或与内置模板布局相同的项目 ...

  7. appcan.slider.js探索

    1:-moz代表firefox浏览器私有属性 -ms代表IE浏览器私有属性 -webkit代表chrome.safari私有属性 2:定义新模块:appcan.define(name,function ...

  8. 【AppCan 开发者】北京开发者交流会之行

    不久前AppCan官方组织了开发者交流会活动,我有幸参加了这次活动,官方报销全部费用,还有妹子相伴,哇哇,这是光明正大打FB的节奏啊~ (呃,说实话,这是俺第一次去帝都~心里挺激动的~) 10.25帝 ...

  9. APPCAN MAS接口之SOAP

    APPCAN MAS接口中使用webservice接口形式,示例代码如下:  1 var MEAP=require("meap");  2   3 function run(Par ...

  10. 使用APPCAN开发移动应用APP心得

    要想使用APPCAN开发移动应用,首先要弄明白什么是APPCAN,APPCAN都具有哪些功能. 1.什么是APPCAN? APPCAN是正益无线公司开发的一套Hybrid混合应用开发平台(AppCan ...

随机推荐

  1. FLIR 相机采集程序

    https://www.ptgrey.com/Downloads/GetSecureDownloadItem/11048 Grasshopper3 4.1 MP Mono USB3 Vision (C ...

  2. commons-lang3 事件机制 <EventListenerSupport>

    俗话说,站在巨人肩上,可以使我们走的更远 使用已有的java组件,可以提高我们的开发效率,减少出错几率,apache commons中包含有很多这样的组将,commons-lang3就是其中的一个,当 ...

  3. jQuery 中的事件绑定

    一.事件概念 和数据库中的触发器一样,当操作了数据的时候会引发对应的触发器程序执行 一样,JS 中的事件就是对用户特定的行为作出相应的响应的过程,其实上就是浏览器 监听到用户的某些行为的时候会执行对应 ...

  4. 江苏省选2019Round2游记

    JSOI2019R2过去了. 翻盘变翻车... Day 0 打板子.写了几棵主席树. 然后啃CF 331D3.啃不动 Day 1 开T1.这什么玩意啊...换换换 开T2.一眼\(10\)分的状压,码 ...

  5. SkiaSharp图像处理

    SkiaSharp图像处理 .NET Core使用skiasharp文字头像生成方案(基于docker发布)   一.问题背景 目前.NET Core下面针对于图像处理的库微软并没有集成,在.NET ...

  6. linux 下ab压力测试

    1.ab的简介 ab是apachebench命令的缩写. ab是apache自带的压力测试工具.ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试 ...

  7. pstree:command not found

    centos7默认并没有安装pstree,所以会有pstree:command not found yum -y install psmisc

  8. Flex弹性布局以及box-sizing

    (本篇内容代表本人理解,如有错误请指出!) box-sizing box-sizing 属性用于更改用于计算元素宽度和高度的默认的 CSS 盒子模型.可以使用此属性来模拟不正确支持CSS盒子模型规范的 ...

  9. 树 相关知识总结以及Java实现

    最近在温习树相关的知识,并且用java实现了一下树的遍历相关,先贴上代码供大家参考吧. package tree_problems; import java.util.ArrayDeque; impo ...

  10. Error:Failed to resolve: com.android.support.constraint:constraint-layout:1.0.2

    可以换个maven库: allprojects { repositories { jcenter() //maven { url "https://jitpack.io" } ma ...