create view and switch view
pageView扩展backbone
cAbstractApp定义view加载、切换、回退、跳转—webApp/cWebViewApp/hybirdApp为其子类
1、cWebApp扩展了父类的bindEvents,start,goTo,goBack,jump,judgeForward
2、webviewApp扩展了父类的bindEvents,_getCurrentView,start,goTo,goBack,startObserver,endObserver,judgeForward
3、hybridApp扩展了父类的bindEvents,start,loadFromRoute,_getCurrentView,goTo,goBack,jump,startObserver,endObserver,judgeForward
cBaseInit根据Lizard.pdConfig返回实例化abstractApp的方法。
不同环境加载的文件:
在APP,但不是hybrid方式:加载cHybridAppInit、cStatic、cBaseInit
Hybrid:加载cHybridAppInit、cBaseInit
其他方式:cWebAppInit
/**cWebInit的作用
- define([‘cBaseInit’, ‘cWebMember’], function(initFunc, Member){
Member.autoLogin({
callback: function(){
require([‘cStatic’], function(){initFunc()
});
}
});
})
*/
一、backbone view的实现
1
2
3
4
5
6
7
8
9
10
11
12/**
* backbone view构造函数,
* @param {[type]} options [description]
*/
var viewOptions = ['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName', 'events'];
var View = Backbone.View = function(options) {
this.cid = _.uniqueId('view');
options || (options = {});
_.extend(this, _.pick(options, viewOptions));
this._ensureElement();
this.initialize.apply(this, arguments);
};1、_.uniqueId(‘c/view’)生成唯一cid;
2、配置参数options;
3、创建View实例;
4、初始化。
1 |
_.extend(View.prototype, Events, {
|
二、基于backbone View的扩展
define([‘libs’,’header’, ‘cGuiderService’],
function (libs, Header, Guider) {
var PageView = Backbone.View.extend({
// 滚动条位置
scrollPos: { x: 0, y: 0 },
// 标题组件
header: null,
// web 环境下使用pageid
pageid: 0,
// hybrid 环境下使用hpageid
hpageid: 0,
// 页面切换时,是否要滚动至顶部
scrollZero: true,
// 页面切换时,是否执行onHide
triggerShow: true,
// 页面切换时,是否执行onHide
triggerHide: true,
initialize: function () {
this.id = this.$el.attr(“id”);
this.create();
},
// 生成头部
_createHeader: function () {
var hDom = $(‘#headerview’);
this.header = this.headerview = new Header({ ‘root’: hDom });
},
// create 方法,View首次初始化是调用
create: function () {
//调用子类onCreate
this.onCreate && this.onCreate();
},
// view 销毁方法
destroy: function () {
this.$el.remove();
},
// View 显示时调用的方法
show: function () {
// fix ios 页面切换键盘不消失的bug
document.activeElement && document.activeElement.blur();
//生成头部
this._createHeader();
//调用子类onShow方法
!this.switchByOut && this.$el.show();
this.triggerShow && this.onShow && this.onShow();
if (this.onBottomPull) {
this._onWidnowScroll = $.proxy(this.onWidnowScroll, this);
this.addScrollListener();
}
if (this.scrollZero) {
window.scrollTo(0, 0);
}
this.triggerShow = true;
this.triggerHide = true;
//如果定义了addScrollListener,说明要监听滚动条事,此方法在cListView中实现
this.addScrollListener && this.addScrollListener();
},
// View 隐藏
hide: function () {
//调用子类onHide方法
this.triggerHide && this.onHide && this.onHide();
this.removeScrollListener && this.removeScrollListener();
this.$el.hide();
},
// 跨频道跳转
jump: function (opt) {
if (_.isString(opt)) {
window.location.href = opt;
} else {
Guider.jump(opt);
}
},
// 前进
forward: function (url, opt) {
Lizard.forward.apply(null, arguments);
},
// 回退至前一页面
back: function (url, opt) {
Lizard.back.apply(null, arguments);
},
// 刷新页面
refresh: function () {
},
turning: function(){
},
// 唤醒App,要求返回一个app接受的字符串
getAppUrl: function () {
return "";
},
// 返回URL中参数的值
getQuery: function (key) {
return Lizard.P(key);
},
// 保存滚动条位置
saveScrollPos: function () {
this.scrollPos = {
x: window.scrollX,
y: window.scrollY
};
},
// 恢复原滚动条位置
restoreScrollPos: function () {
window.scrollTo(this.scrollPos.x, this.scrollPos.y);
},
// 获得页面Url,hyrbid会增加一个虚拟域名
_getViewUrl: function () {
var url = this._hybridUrl(location.href);
return url;
},
_hybridUrl: function(url) {
if (Lizard.isInCtripApp)
{
return 'http://hybridm.ctrip.com' + this.$el.attr('page-url');
} else {
return url;
}
}
})
return PageView;
});
三、view调用与切换:
1 |
// cPageModelProcessor负责处理viewCache |
create view and switch view的更多相关文章
- SAP技术 - How to create a CDS redirect view for a given database table
Scenario Suppose we have a database table A, and then we create a CDS redirect view B for it, then e ...
- View事件传递之父View和子View之间的那点事
Android事件传递流程在网上可以找到很多资料,FrameWork层输入事件和消费事件,可以参考: Touch事件派发过程详解 这篇blog阐述了底层是如何处理屏幕输,并往上传递的.Touch事件传 ...
- Android-自定义View前传-View的三大流程-Layout
Android-自定义View前传-View的三大流程-Layout 参考 <Android开发艺术探索> https://github.com/hongyangAndroid/FlowL ...
- Android自定义View前传-View的三大流程-Measure
Android自定义View前传-View的三大流程-Measure 参考 <Android开发艺术探索> https://developer.android.google.cn/refe ...
- 通过圆形载入View了解自定义View
这是自定义View的第一篇文章,通过制作简单的自定义View来了解自定义View的流程. 自定义View是Android学习和开发中必不可少的一部分.通过自定义View我们可以制作丰富绚丽的控件,自定 ...
- UISearchController Attempting to load the view of a view controller while it is deallocating is not allowed and may result in undefined behavior
Attempting to load the view of a view controller while it is deallocating is not allowed and may res ...
- Controller将Model数据传给View层,View层应该如何处理?
首先,我们在Model层中添加一个Person类. namespace MVCTest.Models{ public class Person { public string ...
- 使用android.view.TouchDelegate扩大View的触摸点击区域
Android4.0设计规定的有效可触摸的UI元素标准是48dp,转化为一个物理尺寸约为9毫米.7~10毫米,这是一个用户手指能准确并且舒适触摸的区域. 如下图所示,你的UI元素可能小于48dp,图标 ...
- 通过View.post()获取View的宽高
在Android里,获取View宽高的时机是个老生常谈的话题了.众所周知,在Oncreate里直接调用View.getWidth或者View.getMeasuredWidth返回都是0.所以获取宽高时 ...
随机推荐
- 翻译——1_Project Overview, Data Wrangling and Exploratory Analysis-checkpoint
为提高提高大学能源效率进行建筑能源需求预测 本文翻译哈佛大学的能源分析和预测报告,这是原文 暂无数据源,个人认为学习分析方法就足够 内容: 项目概述 了解数据 探索性分析 使用不同的机器学习方法进行预 ...
- java.lang.SecurityException: java.lang.IllegalStateException: java.io.FileNotFoundException:XXXXXX(系统找不到指定文件)
项目启动成功过,但访问页面抛出异常. 在Maven项目启动的时候,tomcat缓存机制没有吧maven jar除外的jar执行到项目里面,所有不要慌,项目重新启动就OK了, 如果这样还是不行的话就找到 ...
- servlet打包成war
1.maven pom文件里指定打包类型 2.jdk工具 进入servlet目录,执行jar -cf war名 *
- samtools faidx
$ samtools faidx t1.fa && echo "faidx built" $ cat t1.fa.fai scaffold332 scaffold3 ...
- springboot shiro ehcache redis 简单使用
引入相关pom <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...
- kettle的基本使用
一.下载下载kettlehttp://sourceforge.net/projects/pentaho/files/Data%20Integration/7.0/pdi-ce-7.0.0.0-25.z ...
- spring web项目中整合netty, akka
spring web项目中整合netty, akka 本身的web项目仍然使用tomcat/jetty8080端口, 在org.springframework.beans.factory.Initia ...
- [Windows] Access SMBIOS
SMBIOS architecture System Management BIOS (SMBIOS) is the premier standard for delivering managemen ...
- 对Java8新的日期时间类的学习(一)
引用自Java译站http://it.deepinmind.com/java/2015/03/17/20-examples-of-date-and-time-api-from-Java8.html 除 ...
- import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.binary.Base64;