开始使用 HBuilder 和 Mui - 1 - 分析 index.html ;
转自:http://ask.dcloud.net.cn/article/240
好吧,在比较了 Codenameone 和 HBuilder 以后,俺反复考虑后,终于还是决定使用 HBuilder 这个东东;
简单说说 Codenameone 吧,用 java 进行开发的跨平台(注意,目前支持 android, ios, wp, BlackBerry) 的框架,首先吸引我的是它的跨平台移动开发能力, 其次吧,编译型的语言比较好进行TDD开发, 第三,有一个可视化的界面设计环境以及界面设计和处理代码相分离的处理逻辑,第四,无需虚拟机直接可以在本地的JAVA IDE中运行进行测试和调试;
但是,讨厌的几个问题是,1.需要FQ, 2.文档全E文, 3. 除了API之外,基本没有文档;
好吧,闲话少说,开始使用 HBuilder;
俺就不吐槽文档MUI文档缺少的问题了;(建议首先一定要仔细看 mui 的那个文档至少3遍,对于里面的所有变量定义有一个大致印象,否则,对于比较喜欢寻根究底的人(比如说我)来说,会比较辛苦);
先创建一个 HelloMUI 的例子项目;在手机上运行,很好;在AVD的模拟器上运行,也很好;
用 chrome 浏览器连接真机想Inspect进行调试,已经看到打开哪些网页l了,但就是Inspect不了,好吧,我的手机是红米,目前是4.2,需要4.4.2才支持;
用 chrome 浏览器连接AVD的虚拟机来Inspect进行调试,同样看到打开哪些网页l了,但就是Inspect不了,好吧,FQ,给 chrome安装上ADB插件,还是 Inspect不了;
好吧,安装上了一个号称快得多的Genymotion,再下了一个4.4.4的镜像,终于可以用chrome注入进行代码调试了;
但是,谁说额Genymotion速度要快的啊?除了虚拟机启动速度快那么一点意外,
俺的I7、8G内存跑HelloMui无论是启动速度还是响应速度,比起安装上 InterHAXL 再加 Inter ATOM 的虚拟机速度慢的实在太多了;
好吧,俺忍。。。。等 魅蓝Note2 出来俺就换手机;
开始仔细看 index.html 的代码和 List.html 的代码;
好吧,目前为止 , 可以知道 mui.init 里面那个object带的属性有:
swipeBack:true //启用右滑关闭功能
statusBarBackground: '#f7f7f7',
gestureConfig:{
doubletap:true
},
subpages: [{
id: 'list',
url: 'list.html',
styles: {
top: '45px',
bottom: 0,
bounce: 'vertical'
}
},
styles:{ .... }
那么 statusBarBackground 这个参数是干啥的呢?貌似是状态栏的背景颜色,有没有其他类似的其他属性呢?不知道;
甚至, statusBarBackground 这个属性在 MUI自己的API文档里提都没有提到过,是我在 index.html的第27行里面翻出来的;
好吧,继续往下看, mui.os 这个又什么东东?继续翻API,很遗憾,还是没有;
看 HBuilder的提示, mui里面有 ajaxSetting, data, fn, os, gestures, options 。等几个属性,好吧,大家暂时记得 mui.os 里面记录了操作系统的一些环境变量的定义就可以了;至于其他属性,大家就当没有看到吧;
那个弹出菜单因为俺估计用不到,所以嘛,就跳过了;
继续往下看,到了显示关于 页面的处理了;
俺贴出代码吧,
document.getElementById('info').addEventListener('tap', function() {
if (subWebview == null) {
//获取共用父窗体
template = plus.webview.getWebviewById("default-main");
}
if(template){
subWebview = template.children()[0];
subWebview.loadURL('examples/info.html');
//修改共用父模板的标题
mui.fire(template, 'updateHeader', {
title: '关于XXXX',
showMenu: false
});
template.show('slide-in-right', 150);
}
});
plus.webview.getWebviewById("default-main"); 这个 default-main 是啥东东??
开 MUI API文档,没有; 看 H5 Api文档,还是没有;整个项目查找, 稀奇了,还是没有:
好吧,俺承认失败了,姑且认为 default-main 是整个程序第一个加载的页面吧;(这个看法是错误的,稍后会说明);
继续往下看,没有其他需要注意的地方了;真的没有了?
template.children()[0] 这个是啥东东,问题回到原点,归根结底还是需要知道 plus.webview.getWebviewById("default-main") 是什么东东;
暂时放下这个问题, subWebview.loadURL('examples/info.html'); 这个没有疑问;
//修改共用父模板的标题
mui.fire(template, 'updateHeader', {
title: '关于XXXX',
showMenu: false
});
template.show('slide-in-right', 150);
很简单吧?没有这么简单;大家打开 examples/info.html 这个页面,会发现里面也定义了 Header,俺比较偏执,总觉得这儿不应该定义 Header,于是就把 info.html 页面里面的 Header 给注释掉了,呵呵,果然标题照样给改掉了;
说明什么?说明, mui.fire(template, 'updateHeader' 这个修改的不是 info.html 里面 Header 定义的标题;
好吧,打开 关于 页面,再按 Back 按钮,首页标题还是 Hello mui,
说明什么?说明,mui.fire(template, 'updateHeader' 这个修改的不是 index.html 里面 Header 定义的标题;
那么到底修改的是哪儿的Header的内容?
再次打开 关于 页面,可以发现 页面切换时会显示 加载中 这三个字;本来我以为这个是 mui 在页面切换时的自动提示,但还是在整个项目中搜了一下,居然发现在 example/template.html 中有这个三个字,怀着好奇的心情,俺把这三个字改成了 TMD , 结果,呵呵,页面切换时果然显示了 TMD ;
好吧,俺服了;继续找 template.html 在哪儿被引用;
list.html 中有这样的定义: getTemplate('default', 'examples/template.html'); 再看 getTemplate的方法定义,
var headerWebview = mui.preload({
url:header,
id:name "-main",
styles:{
popGesture:"hide",
},
extras:{
mType: 'main'
}
});
终于,俺们找到了 default-main 是在哪儿定义的了;
再看下面的代码,headerWebview.append(subWebview); 终于也找到 template.children()[0] 是啥东东了。。。
说到这儿,大家以为完了?哪有这么简单;
subWebview.loadURL('examples/info.html'); 大家还记得吧,上面我把 info.html 的 Header部分注释掉了,现在俺把 Header 给改回来,
那么 这个 subWebview 加载的页面应该也包含有 一个 Header, 可是这个 info.html 里面的这个 Header 无论如何也不会显示出来?
现在,问题来了,这个 Header 到底到哪儿去了?
暂时就这样了;
经过这个这个分析,俺有些怀疑自己的选择了。。。

11 个评论
.mui-plus.mui-android header.mui-bar{
display: none;
}
在Android环境下吧header隐藏了。。。
…………。
id: name + "-main",
是在传送getTemplate("default",... 过去的,所以得到 default-main
开始使用 HBuilder 和 Mui - 1 - 分析 index.html ;的更多相关文章
- Dcloud课程3 什么是HBuilder和MUI
Dcloud课程3 什么是HBuilder和MUI 一.总结 一句话总结:DCloud(数字天堂)推出一款支持HTML5的Web开发IDE.最大的特点是快.MUI是高性能App的框架,也是目前最接近 ...
- ZendFramework2 源码分析 index.php
<?php /** * This makes our life easier when dealing with paths. Everything is relative * to the a ...
- HBuilder开发MUI web app溢出页面上下无法滚动问题
因为没有对页面初始化,所以页面溢出部分不会显示,要解决此问题需要加上下面代码: JS代码: (function($){$(".mui-scroll-wrapper").scroll ...
- MUI框架-11-MUI前端 +php后台接入百度文字识别API
MUI框架-11-MUI前端 +php后台接入百度文字识别API 这里后台不止一种,Python,Java,PHP,Node,C++,C# 都可以 这里使用的是 php 来介绍,已经解决所有问题,因为 ...
- mui初级入门教程(一)— 小白入手mui的学习路线
文章来源:小青年原创发布时间:2016-05-15关键词:mui,html5+转载需标注本文原始地址:http://zhaomenghuan.github.io/#!/blog/20160515 写在 ...
- MUI开发记录
最近很久没有更新博客了,因为一直在学习前端h5 手机app的开发.曾经一度觉得自己css和js学得不错,进入到前端领域后才发现水很深~ HUuilder使用安卓模拟器 安卓模拟器有很多,我这里以夜神模 ...
- mui底部导航栏切换分页
使用Hbuilder的mui框架开发移动端非常便利.高效: 底部导航栏切换功能也是移动APP开发中必须实现的: 引入mui文件.下面会用到jquery,同时引进 <link href=" ...
- MUI开发大全
最近很久没有更新博客了,因为一直在学习前端h5 手机app的开发.曾经一度觉得自己css和js学得不错,进入到前端领域后才发现水很深~,写代码时HBuilder和VS混用,HBuilder的快捷键和代 ...
- HBuilder
什么是HBuilder? HBbuilder是DCloud(数字天堂)推出的一款支持HTML5的WEB开发IDE,主体是由java编写的,它将HTML/JS代码块进行代码封装,达到简单数据形成代码的特 ...
随机推荐
- 自定义bootstrap样式-9行样式自定义漂亮大气bootstrap导航栏
有人说前端发展太快,框架太多,各有所需,各有所长.看看这幅图,估计都知道这些框架,但是大部分公司中实际要用到的也就那么几个. 发展再快,框架再多.还是得回到原点,不就是Html+Css+JavaScr ...
- 如何写一个SSH项目(一)程序设计大体思路
SSH:分别是指Spring,Struts,Hibernate. 后来Struts2代替了Struts,所以我们常说的SSH是指Spring,Struts2,Hibenate. 其中Spring一般用 ...
- 修改Linux内核参数提高Nginx服务器并发性能
当linux下Nginx达到并发数很高,TCP TIME_WAIT套接字数量经常达到两.三万,这样服务器很容易被拖死.事实上,我们可以简单的通过修改Linux内核参数,可以减少Nginx服务器 的TI ...
- Delete 命令详解
cp:复制文件 /cp -r:复制目录 /bin/cp -f: 复制文件并覆盖已有文件(写命令的绝对路径/bin/) /cp /ect/passwd .:将其他文件复制到当前目录 /-n :不要 ...
- CGO 类型(CGO Types) 一
CGO Types C作为一种混合编程语言已经很久了,无论那些广泛使用的包是用何种语言实现的,都导出了和C兼容的API.Go程序调用C程序,可以借助两种工具实现,一种是cgo,另一种是SWIG工具.C ...
- Linux下防火墙配置
查看防火墙的状态:/etc/init.d/iptables status 或 service iptables status 1) 临时生效,重启后复原 开启: service iptab ...
- echart异步刷新图表,详细配置注释
echarts刷新技巧: echartData.chear(); //当异步改变数据时,配合echartData .setOption(option)才会有动画效果 echartData.resize ...
- C++中double类型的数字如何保留三位小数点详解
我们知道C语言中,如果要求输出结果保留三位小数,我们可以使用pritf()函数轻松的解决.但是C++的输出运算符<<并没有直接实现这个功能,怎么办呢?之前在找答案的过程中各路大神给出了千姿 ...
- PHP重要知识点
1 获取文件名或目录路径 getcwd() :显示是 在哪个文件里调用此文件 的目录 __DIR__ :当前内容写在哪个文件就显示这个文件目录 __FILE__ : 当前内容写在哪个文件就显示这个文件 ...
- Python day 6(5) Python 函数式编程3
一:装饰器 1 函数对象有一个__name__属性,可以拿到函数的名字 >>> def now(): ... print('2015-3-25') ... >>> ...