Framewrok7 - 页面(Page)介绍1(页面的结构、事件、以及数据)

1,页面结构说明
页面( Pages )和我们在在网页中打开的页面是同样的意思,比如下面一个简单的样例。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
< body >
   ...
   <!-- Views -->
   < div  class = "views" >
     <!-- Your main view -->
     < div  class = "view view-main" >
       <!-- Pages -->
       < div  class = "pages" >
         < div  class = "page"  data-page = "home" >
           < div  class = "page-content" >
             ... 这里是页面内容 ...
           </ div >
         </ div >
       </ div >
     </ div >
     <!-- Another view -->
     < div  class = "view another-view" >
       <!-- Pages -->
       < div  class = "pages" >
         < div  class = "page"  data-page = "home-another" >
           < div  class = "page-content" >
             ... 这里是页面内容 ...
           </ div >
         </ div >
       </ div >
     </ div >         
   </ div >
   ...
</ body >
(1) Pages  是必须的,因为同一个  View  下所有的页面切换都在这里。
(2)每一个  Page  都应该放在  Pages  容器中( <div class="pages"> ),而  Pages  必须是  View  的子元素( <div class="view"> )。
(3)每个  Page 都有一个  data-page 属性,存储了一个唯一的  page 名。这个属性不是必须的,但是强烈推荐使用。因为这个属性在  page 事件中或者在  page 回调函数中可以用来帮助我们确定加载的是哪一个页面。
(4)所有的可见的内容,比如列表和表单等,都应该放在  <div class="page-content"> 中,它是  <div class="page"> 的子元素。这样才能保证正确的样式,布局和滚动。

2,Page 事件介绍
(1)在  Page 事件响应中,我们可以通过  JS 来操作加载好的  Page。具体的事件如下:
EventTargetDescription
pageBeforeInitPage Element
<div class="page">
当Framework7把新页面插入DOM的时候会触发
pageInitPage Element
<div class="page">
当Framework7初始化页面的组件的时候会触发
pageReinitPage Element
<div class="page">
This event will be triggered when cached page becomes visible. 
It is only applicaple for Inline Pages (DOM cached pages)
pageBeforeAnimationPage Element
<div class="page">
当页面初始化完成并且可以做动画的时候触发
pageAfterAnimationPage Element
<div class="page">
在页面动画完成之后触发
pageBeforeRemovePage Element
<div class="page">
Page从DOM中移除之前就会触发这个事件。如果你希望做一些解除事件绑定或者销毁一些插件的时候,这个方法是很有用的。
pageBackPage Element
<div class="page">
在返回上一页动画执行之前就会触发这个事件。和 "pageBeforeAnimation" 的不同之处在于,这个事件在老页面上也会触发,也就是那个从中间滑动到右边的页面。
pageAfterBackPage Element
<div class="page">
返回上一页动画执行完成之后触发这个事件。同样,区别于"pageAfterAnimation",他也会在老页面上触发。

(2)有两种方式可以使用这些事件。下面以  pageInit  事件为例:
1
2
3
4
5
6
7
8
9
10
// 方式1. 处理所有页面的pageInit事件 (推荐):
$$(document).on( 'pageInit' function  (e) {
   // 当页面加载并初始化完毕后执行一些代码....
 
})
 
// 方式2. 处理指定页面(data-page="about")的 pageInit事件 (不推荐):
$$(document).on( 'pageInit' '.page[data-page="about"]' function  (e) {
   // 当页面加载并初始化完毕后执行一些代码....
})

3,Page 数据介绍
在  Page  事件中, event  实例中包含了关于当前页面非常详细的数据。
(1)下面样例中,我们将页面数据保存到一个变量中。
1
2
3
4
$$(document).on( 'pageInit' function  (e) {
   //获取页面数据,这里面保存了所有的请求信息
   var  page = e.detail.page;
})

(2)上面将页面数据保存到一个对象中,这个对象里面包含的属性如下:
Page Data Properties
page.name就是 data-page 设定的名称
page.url当前页面的URL
page.query当前页面的get参数,是一个对象。假设你的页面URL是 "about.html?id=10&count=20&color=blue",那么query就是:
{
  id: '10',
  count: '20',
  color: 'blue'
}                  
page.viewobject. 包含当前页面的view对象(前提是view已经初始化完成)
page.containerPage 对应的 HTMLElement
page.fromstring 当前页面从哪个方向加载进来。如果是新加载的页面,则为"right",如果是返回上一步的页面,则为"left"
page.navbarInnerContainernavbar-inner" 对应的 HTMLElement,只有动态导航栏才有。
page.swipeBackboolean。当前页面是否是滑动返回的。只有在 onPageBefore/AfterAnimation 回调函数/事件 中才可以访问。
page.contextobject. 这个页面的 Template7 上下文
page.fromPageobject. 上一个页面的pageData

(3)使用样例如下。比如我们可以在一个  handler  中,根据不同的  page.name  来处理不同的页面。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$$(document).on( 'pageInit' function  (e) {
     var  page = e.detail.page;
     // 处理about页面
     if  (page.name ===  'about' ) {
         // 获取url中的count参数值 (about.html?count=10)
         var  count = page.query.count;
         // 根据count生成对应数量的列表
         var  listHTML =  '<ul>' ;
         for  ( var  i = 0; i < count; i++) {
             listHTML +=  '<li>'  + i +  '</li>' ;
         }
         listHTML +=  '</ul>' ;
         // 将列表数据填充到页面内容区域上
         $$(page.container).find( '.page-content' ).append(listHTML);
     }
     // 处理services页面
     if  (page.name ===  'services' ) {
         myApp.alert( 'Here comes our services!' );
     }
});

原文出自: www.hangge.com   转载请保留原文链接: http://www.hangge.com/blog/cache/detail_1353.html
在 Android Framework 中添加自定义库,可以通过以下步骤实现: 1. 将自定义库的源代码添加到 Android Framework 中,通常情况下位于 `frameworks/base/core/java` 或 `frameworks/base/services/core/java` 目录下。 2. 在 `frameworks/base/core/res` 或 `frameworks/base/services/core/res` 目录下添加自定义库的资源文件,比如布局文件、字符串资源等。 3. 在 Android.mk 文件中添加自定义库的编译配置信息,包括源代码的编译和资源文件的打包。 4. 在 AndroidManifest.xml 文件中注册自定义库,以便系统可以识别和加载该库。 5. 在 Java 代码中使用 `import` 语句导入自定义库的类,并在代码中调用该类的方法。 需要注意的是,自定义库需要在 APK 中进行引用才能被 APK 调用。可以通过以下步骤将自定义库引用到 APK 中: 1. 在 APK 的 build.gradle 文件中添加依赖库的引用,例如: ``` dependencies { implementation project(':mylibrary') } ``` 其中 `mylibrary` 是自定义库的名称。 2. 在 APK 的 AndroidManifest.xml 文件中添加自定义库的使用权限,例如: ``` <uses-library android:name="mylibrary" android:required="true" /> ``` 其中 `mylibrary` 是自定义库的名称。 完成以上步骤后,自定义库就可以被 APK 调用了。需要注意的是,自定义库只能被具有相应权限的应用调用。如果需要让所有应用都能调用该库,可以考虑将库打包成系统级别的 APK,并将其放置到 `/system/app` 目录下。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值