windows8 Metro APP JavaScript开发从零开始 - 基础篇(一)
2012-12-19 10:21
295 查看
MS发布的vs2012开发平台. 加入了对JavaScript语言的支持. 从此之后,我们可以在不使用中间件(如phoneGap等)的情况下使用纯js来进行app开发了. 这无疑是个振奋人心的消息.
且不说win8的推广是否能够成功. 就算win8挂了(不管你信不信,我信。 windows隔代死。。。).相信还有win9 win10会火起来. Metro App的开发始终会成为一部分人谋生的手段.
小弟不才, 比较早的接触到了win8 metro app的开发. 下面让我带领大家来认识一下Metro App. 通过一系列的文章一起来开发一个看起来像点样子的Metro App应用.
首先,让我们了解一下. vs2012对语言整合的基础架构. (如下图)
1. Desktop Apps: 即传统的x86 架构应用程序开发 [图中靠右的部分]。 这一部分与以往没有任何改变。我们还是可以使用vs2012开发 .exe应用程序 或 基于浏览器的web站点。
2. Metro style Apps: 这部分是我们要重点了解的。[图中靠左的部分]。 在图中的最上层(除了黑色的一行是标题)即是我们可以用于开发Metro app的语言。
其中包括C` C++ ` C# `VB, 这些语言开发的应用使用xaml来作前端呈现。 另一部分则是我们的文章中要学习的JavaScript语言, 搭配HTML5/CSS3。
从图中我们可以直观的看见,这些语言都‘坐落’于下面的Windows Runtime APIs层上。 Windows Runtime APIs层为所有支持的语言提供了用于调用设备的接口。包括基础命令,数据存储,图形处理,多媒体,硬件驱动等等。
以下内容是个人理解,为免误人子弟。仅供参考!!!
我不是传说中的高手,也不知道很多专业术语。以我的理解,直白的说我认为。 windows Runtime 类似一个中间件,把我们编写的代码(不论是js,C#或vb)解析为统一的机器语言交由更底层的服务来执行。windows Runtime除了提供接口外,还有一项重要的工作就是代码映射! 所以理论上来讲,C#能实现的功能JavaScript都能!这在传统的项目开发中是不敢想像的。 在js中,可以直接调用C#编写的类库中的方法。 因为在底层它们都被解析为统一的语言。 也正因如此,在使用C#开发时,你无法引用第三方的dll库(如:log4net等),因为第三方库很可能引用了winRT不支持的方法。
总之:vs2012在metro app开发时,给我们定的框框还是很死的。 除了winRT apis之外,不能用别的。。。。。。
费话不多说,我开始进入metro app的开发。
1. 打开vs2012。 FILE-->New-->Project
如图: 我们选择JavaScript项目中的Grid App模版。 选用模版的好处是我们可以不用编写很多核心代码,就能实现一些必要的功能。如Navigation的实现。 预定义模版中的代码我会在下章开始作详细说明。
建立好项目之后,直接运行(按F5 或 点击运行按钮)即可看到一个完整的metro app应用。
大家先体验一下Metro App应用, 随后我们先来了解一下Metro App的基础运行机制。
1分钟,
2分钟,
3分钟,
4分钟,
差不多了。。。。我挺二的是吧! 大家都这么说!
当app跳过截入界面(就是只有一个方块里面有一个十字叉的界面)进入到default.html页之后, 整个metro app之后都运行在一个页面之上。 也就是别看我们项目中建立了很多.html页面, 基实app一直只在一个页面上运行。 页面的切换只是一个高度和宽度都为100%的div在覆盖再覆盖。 用js作过遮罩层的同学都知道。。。 覆盖的过程中Navigation的方法只是使用异步的方法把我们写的html页面读到新的div上。 所以页面之间的切换过场才会这么漂亮和流畅。
说到这里有些同学可能会问了,这样会不会乱了啊。页面没有变过,那么样式和window对象都没有被清空。 命名以及方法的偶合率会不会很高!! 当然会,不过ms给我们的写好了代码,告诉我们怎么解决!
a) 样式, 要以命名空间为基础。 每个页面对应的样式表都写在针对本页面的命空间下。 这样即使同名的样式,在不同的页面下也不会冲突。代码如下:
整个样式表以 .addKnowledge开始, 之后所有的样式都在这个命名空间下。 然后在html页面中的主容器上引用这个样式。 代码如下:
b) JavaScript, 针对每个页面的js代码都要写在闭包中。 这个不用详细讲了。。。 解偶的神级方法! 代码如下:
这样,冲突就解决了。 如果再仔细想,其实这样挺好的。 因为我们定义的全局(针对整个应用)样式和变量或面向对象的方法在所有页面中都有效! 不用像web开发那样。每个页面都要引用一次 <script src='jquery.js' type='text/javascript'></script>了。对吧!! 规划好你的项目结构,把所有公用的样式和js文件在defautl.html页面中引用一次, 以后再也不用管它了。 想用就调用即可! 性能上也没得说, 一次加载终生受用。
快到时间了,结束前再说点别的。
Metro app的运行环境: 大概你看过Metro app的都发现了, 没有关闭按钮的。 理所当然的应用只能被挂起。 windows8要监听资源开销, 资源不足时。会把挂起队列中消耗资源最大的进程杀死。 以下是ms人员告诉我们的:%开发过程中要注意应用的资源开销,要良好的处理挂起状态下应用的休眠% 也就是说,争取让我们的应用在挂起
状态中占用尽量小的资源, 争取在最后才被干掉。。。
怎么样会增加资源开销呢? 如: 保持与本地文件的长连接` 代码造成内存泄露,对象与元素的 循环引用。。等等(其实我也不知道还有什么!!!)
调试: 在vs2012下开发,您大可不必为调试环境烦恼。 vs2012有内置的模拟器。 使用方法如下图:
默认使用本地计算机布署和调试, 还可以使用 Simulator(模拟器)。 分隔线上方的是正在使用的模式。
模拟器打开后,还有很多功能。 翻转, 改变分辨率,触控模拟等。
哦对了, 我没写吧。 要在windows8系统下哦。
从下章开始,我为大家详细讲解 Grid App模版中代码的含义。
且不说win8的推广是否能够成功. 就算win8挂了(不管你信不信,我信。 windows隔代死。。。).相信还有win9 win10会火起来. Metro App的开发始终会成为一部分人谋生的手段.
小弟不才, 比较早的接触到了win8 metro app的开发. 下面让我带领大家来认识一下Metro App. 通过一系列的文章一起来开发一个看起来像点样子的Metro App应用.
首先,让我们了解一下. vs2012对语言整合的基础架构. (如下图)
1. Desktop Apps: 即传统的x86 架构应用程序开发 [图中靠右的部分]。 这一部分与以往没有任何改变。我们还是可以使用vs2012开发 .exe应用程序 或 基于浏览器的web站点。
2. Metro style Apps: 这部分是我们要重点了解的。[图中靠左的部分]。 在图中的最上层(除了黑色的一行是标题)即是我们可以用于开发Metro app的语言。
其中包括C` C++ ` C# `VB, 这些语言开发的应用使用xaml来作前端呈现。 另一部分则是我们的文章中要学习的JavaScript语言, 搭配HTML5/CSS3。
从图中我们可以直观的看见,这些语言都‘坐落’于下面的Windows Runtime APIs层上。 Windows Runtime APIs层为所有支持的语言提供了用于调用设备的接口。包括基础命令,数据存储,图形处理,多媒体,硬件驱动等等。
以下内容是个人理解,为免误人子弟。仅供参考!!!
我不是传说中的高手,也不知道很多专业术语。以我的理解,直白的说我认为。 windows Runtime 类似一个中间件,把我们编写的代码(不论是js,C#或vb)解析为统一的机器语言交由更底层的服务来执行。windows Runtime除了提供接口外,还有一项重要的工作就是代码映射! 所以理论上来讲,C#能实现的功能JavaScript都能!这在传统的项目开发中是不敢想像的。 在js中,可以直接调用C#编写的类库中的方法。 因为在底层它们都被解析为统一的语言。 也正因如此,在使用C#开发时,你无法引用第三方的dll库(如:log4net等),因为第三方库很可能引用了winRT不支持的方法。
总之:vs2012在metro app开发时,给我们定的框框还是很死的。 除了winRT apis之外,不能用别的。。。。。。
费话不多说,我开始进入metro app的开发。
1. 打开vs2012。 FILE-->New-->Project
如图: 我们选择JavaScript项目中的Grid App模版。 选用模版的好处是我们可以不用编写很多核心代码,就能实现一些必要的功能。如Navigation的实现。 预定义模版中的代码我会在下章开始作详细说明。
建立好项目之后,直接运行(按F5 或 点击运行按钮)即可看到一个完整的metro app应用。
大家先体验一下Metro App应用, 随后我们先来了解一下Metro App的基础运行机制。
1分钟,
2分钟,
3分钟,
4分钟,
差不多了。。。。我挺二的是吧! 大家都这么说!
当app跳过截入界面(就是只有一个方块里面有一个十字叉的界面)进入到default.html页之后, 整个metro app之后都运行在一个页面之上。 也就是别看我们项目中建立了很多.html页面, 基实app一直只在一个页面上运行。 页面的切换只是一个高度和宽度都为100%的div在覆盖再覆盖。 用js作过遮罩层的同学都知道。。。 覆盖的过程中Navigation的方法只是使用异步的方法把我们写的html页面读到新的div上。 所以页面之间的切换过场才会这么漂亮和流畅。
说到这里有些同学可能会问了,这样会不会乱了啊。页面没有变过,那么样式和window对象都没有被清空。 命名以及方法的偶合率会不会很高!! 当然会,不过ms给我们的写好了代码,告诉我们怎么解决!
a) 样式, 要以命名空间为基础。 每个页面对应的样式表都写在针对本页面的命空间下。 这样即使同名的样式,在不同的页面下也不会冲突。代码如下:
.addKnowledge header[role=banner] { -ms-grid-column-span:2; -ms-grid-rows: 20px 1fr 0; background: none; } .addKnowledge header[role=banner] .titlearea { background: url(/images/logo.png) no-repeat 0 -34px; } .addKnowledge header[role=banner] .pagetitle { color: #fff; }
整个样式表以 .addKnowledge开始, 之后所有的样式都在这个命名空间下。 然后在html页面中的主容器上引用这个样式。 代码如下:
<body> <div class="fragment addKnowledge"><!--主要容器 fragment是全局样式-->
<header aria-label="Header content" role="banner"> <button class="win-backbutton" aria-label="Back" disabled type="button"></button> <h1 class="titlearea"> <span class="pagetitle"></span> </h1> </header>
<!--其它内容在这里-->
</div>
</body>
b) JavaScript, 针对每个页面的js代码都要写在闭包中。 这个不用详细讲了。。。 解偶的神级方法! 代码如下:
(function () { "use strict"; WinJS.UI.Pages.define('/konwledge/pages/addKonwledge.html', { ready: function (doc, options) { //this.pageInit(options); //this.eventBind(options); }
);
})();
这样,冲突就解决了。 如果再仔细想,其实这样挺好的。 因为我们定义的全局(针对整个应用)样式和变量或面向对象的方法在所有页面中都有效! 不用像web开发那样。每个页面都要引用一次 <script src='jquery.js' type='text/javascript'></script>了。对吧!! 规划好你的项目结构,把所有公用的样式和js文件在defautl.html页面中引用一次, 以后再也不用管它了。 想用就调用即可! 性能上也没得说, 一次加载终生受用。
快到时间了,结束前再说点别的。
Metro app的运行环境: 大概你看过Metro app的都发现了, 没有关闭按钮的。 理所当然的应用只能被挂起。 windows8要监听资源开销, 资源不足时。会把挂起队列中消耗资源最大的进程杀死。 以下是ms人员告诉我们的:%开发过程中要注意应用的资源开销,要良好的处理挂起状态下应用的休眠% 也就是说,争取让我们的应用在挂起
状态中占用尽量小的资源, 争取在最后才被干掉。。。
怎么样会增加资源开销呢? 如: 保持与本地文件的长连接` 代码造成内存泄露,对象与元素的 循环引用。。等等(其实我也不知道还有什么!!!)
调试: 在vs2012下开发,您大可不必为调试环境烦恼。 vs2012有内置的模拟器。 使用方法如下图:
默认使用本地计算机布署和调试, 还可以使用 Simulator(模拟器)。 分隔线上方的是正在使用的模式。
模拟器打开后,还有很多功能。 翻转, 改变分辨率,触控模拟等。
哦对了, 我没写吧。 要在windows8系统下哦。
从下章开始,我为大家详细讲解 Grid App模版中代码的含义。
相关文章推荐
- windows8 Metro APP JavaScript开发从零开始 - 基础篇(二)
- 【windows8开发】javascript开发Metro风格App
- 【windows8开发】javascript开发Metro风格App
- 【windows8开发】Metro App生命周期之概述
- 【windows8开发】Metro App生命周期之概述
- 【windows8开发】Metro App生命周期之启动
- 【Windows8开发】Metro App生命周期之打包、部署安装与卸载
- 【windows8开发】现有代码移植到Metro App所必须的API整合
- 【windows8开发】现有代码移植到Metro App所必须的API整合
- windows8 Metro App用Javascript来调用C#的library
- 【windows8开发】C++开发Metro风格App
- 【windows8开发】Metro App生命周期之Suspended与Resume
- 【windows8开发】C++开发Metro风格App
- windows8 APP开发的远程调试
- 【windows8开发】异步编程之Promise(Javascript)
- 使用Windows8开发Metro风格应用一
- Windows8 Metro应用开发之C#(2)- 布局控件Grid,Canvas,StackPanel(延续Silverlight)
- 基于VisualStudio11开发Windows8的Metro sample讲解(1)MessageBox
- 一个iOS APP开发的过程。(从零开始)
- WinJS开发iframe中Javascript执行错误----metro