页面在项目架构中是一个很重要的概念,它让我们能够将一个功能复杂的项目拆分成一个一个功能比较独立的小区域,这极大的提高了代码的可读性和可维护性。

在我们这个框架中,一个页面由JS和HTML两部分组成,首先让我们来看看JS部分吧。

以上的这部分代码就是一个在命名空间“at.pages”下的“Details”页面的定义。你可能已经注意到了,在第2行代码,有一个“pages/details.html”。对,就是这样,HTML文件的相对路径在这个页面的构造函数中进行了指定。这样,这个页面的JS部分和HTML部分就联系起来了。

在这个框架中,所有页面都应该继承自"nova.Page", 当然,你可以定义一个适合你项目的基类,比如DemoPageBase (仍然继承自nova.Page),然后你定义的其他页面继承自这个自定义的基类。

再让我们来看看HTML部分的代码:

怎么样?这个HTML页面的定义是不是非常清爽呢。

下面,让我们看看神奇的页面跳转和传值吧。

3.1 页面跳转

页面跳转在我们这个框架中其实非常简单,我甚至都想不到能有更简单的页面跳转方式了。

首先,我们来看看另一个示例页面的定义吧。

这实际上是一个菜单页面,只放了一些链接。这个页面包含了3种页面跳转的方式:

  1. 直接回退到上一个页面(如果指定了参数url的值,那么会一直回退到这个url对应的页面);
  2. 指定HTML页面路径进行跳转,适用于一些静态或简单页面;
  3. 构建一个目标页面的实例,然后进行跳转(此处可以传递任意参数),适用于大多数页面。

怎么样,这样的页面跳转是不是非常简单呢?既能够快速跳转到简单页面,有能够拥有足够的自由来控制跳转到复杂的页面。

注意:这段代码中的变量"at"扩展自"nova.application",所以你看到的"at.gotoPage"实际上是"nova.application.gotoPage"。

3.2 页面传值

页面传值比页面跳转更简单。

请看上节的这段代码:

首先我们实例化了一个目标页面,然后直接给这个实例的某个属性赋值,然后再跳转到这个页面。 是不是很简单并且一目了然呢?

再看看目标页面的定义:

我们看到"editingTarget" 实际上是这个页面的一个属性,这样目标页面中的所有代码都可以基于这个属性独立工作,当其他页面传过来的值发生改变时,这个页面就会呈现不一样的内容了。

3.3 页面事件

目前在我们项目中大量用到的事件只有onLoaded 和 onNavigatingAway,因此到现在为止,我们这个框架只实现了这两个事件。但是如果你想添加更多的事件,你也可以很容易的修改我们的框架实现。

需要特别注意的是,这里所说的事件,并不是像jquery中定义的那样,即一个对象可以为某个事件绑定多个处理程序,然后在事件发生的时候,每个处理程序都将运行。这里所说的事件实际更像是方法的定义,因为它不是用于多次绑定,且在事件发生的时候只会执行一次。

3.3.1 onLoaded事件

还记得我们在定义页面的构造函数中指定的HTML的路径吗?你可能已经猜到了,我们就是用的jquery的ajax去动态加载这个HTML页面的。默认情况下,ajax返回的HTML会被放到div#body中,然后,页面的onLoaded事件(实际上是方法)被调用。

于是你明白了,onLoaded事件是页面的主入口。当代码执行到onLoaded里面的时候,那个HTML已经加载到了document里面,因此你可以在onLoaded事件里面去绑定数据、绑定单击事件了。

3.3.2 onNavigatingAway事件

这个事件会在页面即将离开的时候调用,它有一个参数callback。当你不显示的调用这个callback的时候,页面是不会离开的。这样设计的主要原因是,javascript里面到处都是异步的调用和回调,只有用callback才能在这个事件中做一些异步的操作。

通常我们还会在这个事件中做一件事,那就是释放这个页面的实例所占用的资源。

Nova PhoneGap框架 第三章 页面的更多相关文章

  1. Nova PhoneGap框架 第七章 设备事件处理

    我们的框架包含了几种设备事件的处理,目的是为了让我们的程序员更容易的完成代码.这些事件包括:回退键(Android)和横竖屏切换事件. 7.1 Android回退键 首先来说说回退键的事件处理.当用户 ...

  2. Nova PhoneGap框架 第四章 本地数据库

    我一直想把EntityFramework(简称EF)的那一套搬过来,应用于HTML5 SQLite. 幸运的是,我几乎做到了,有些功能无法完成的那是因为SQLite本身不支持.至少从现在已经完成的功能 ...

  3. Nova PhoneGap框架 第五章 文件结构

    一个好的项目架构必然有着合理的文件结构,如果一个项目的文件组织混乱,那么可以断言一定是项目架构有问题. 合理的文件结构能够帮你更清晰的管理你的文件,并且当需要添加新的文件的时候,你的程序员很清楚应该加 ...

  4. Nova PhoneGap框架 第六章 使用Mock

    在我们的框架中引入了一个很重要的设计,那就是使用Mock. 这里的mock是指cordova.mock.js文件,它模拟了PhoneGap(Cordova)的API,从而可以在浏览器中运行测试我们的程 ...

  5. Nova PhoneGap框架 第一章 前言

    Nova PhoneGap Framework诞生于2012年11月,从第一个版本的发布到现在,这个框架经历了多个项目的考验.一直以来我们也持续更新这个框架,使其不断完善.到现在,这个框架已比较稳定了 ...

  6. Nova PhoneGap框架 第八章 滚动条

    你可能会疑惑为什么滚动条这么常见的功能会在这里单独列出,但如果你有过PhoneGap开发经验的话,你就会发现要在Android 2.3 里面实现滚动条那真不是一件容易的事. 8.1 概述 目前主流的P ...

  7. Nova PhoneGap框架 总结

    Nova PhoneGap Framework 是完全针对PhoneGap应用程序量身定做的,在这个框架下开发的应用程序很容易实现高质量的代码,很容易让程序拥有很好的性能和用户体验. 在经历了多个项目 ...

  8. Nova PhoneGap框架 第二章 理解index.html

    跟绝大多数PhoneGap程序一样,Index.html是程序的入口.这个页面应该完成应用程序的初始化工作. 首先,让我们来看看这个页面通常都长什么样子: 下面我将一一解释这个页面都做了哪些初始化工作 ...

  9. Nova PhoneGap框架 第九章 控件

    我们的框架中也提供了一些常用的控件,这些控件大多都依赖于我们的框架,也正是在我们的框架下才使得实现这些控件的变得更简单.但是我们的框架是不依赖与这些控件的,如果你用不上这些控件,你完全可以把相关的代码 ...

随机推荐

  1. phpcms 整合 discuz!

    第一步,进入discuz后台,点击UCenter菜单,然后点击应用管理,接着点击右侧的添加新应用按钮 然后填写应用相关信息: 1.应用类型选择“其他” 2.应该名称填写“phpcms” //此处可以自 ...

  2. OpneCv2.x 模块结构

    转自:http://blog.csdn.net/huang9012/article/details/21811271 之前啃了不少OpenCV的官方文档,发现如果了解了一些OpenCV整体的模块架构后 ...

  3. 用Redis实现Session功能

    0.什么是Redis Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API ---维基百科 1.与其他用户状态保存方 ...

  4. EXT5 时间框控制(开始时间不能大于结束时间)

    1.网上看的大部分代码都是利用vtype : 'dateRange'  EXT的这个属性,但是可能由于环境问题还是怎么样,我就是实现不了想要的效果. 然后研究了一下,在时间框的listeners 监听 ...

  5. 在Sublime TEXT3中添加brogrammer-theme主题配色方案

    喜欢用sublime text3的都知道原配的主题要么就是背景颜色太亮太累眼,要么就是配色太少不便于一眼看出哪有问题.所以在此推荐一个brogrammer-theme的主题,配色非常的全而且添加了扁平 ...

  6. React生命周期

    在react生命周期中,分2段执行,一个挂载的生命周期,一个是组件发生了数据变动,或者事件触发而引发的更新生命周期. 注:react生命周期很重要,对于很多组件场景的应用发挥重要作用,而且不熟悉生命周 ...

  7. 将一个字符串中的大写字母转换成小写字母,小写字母转换成大写字母(java)

    背景:刚刚学到java的String和StringBuffer类,遇到如标题所示的题. 要求:必须要用到String类的toUpperCase方法和toLowerCase方法 思路:用到StringB ...

  8. js转盘抽奖

    这个是很简易的转盘,只用了html,css,js 通过css产生一个转盘上的指针,用js动态改变css中的transparent改变指针的角度.再添加一个背景图片类似于奖项的转盘 <!DOCTY ...

  9. bzoj 4327: JSOI2012 玄武密码

    听说这题不公开.. 那就不贴题意了 一眼看上去还以为是exkmp的裸题.. 看了数据范围,呵呵.. 多串匹配嘛.. 就用AC自动机咯,而且每个点最多也就只有$4$个孩子 用原串在AC自动机上走,碰到的 ...

  10. python基础02 基本数据类型

    摘要:简单的数据类型以及赋值 变量不需要声明 python的变量不需要声明,你可以直接输入: >>>a = 10 那么你的内存里就有了一个变量a, 它的值是10,它的类型是integ ...