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.所以获取宽高时 ...
随机推荐
- reactor-core
<dependency> <groupId>io.projectreactor</groupId> <artifactId>reactor-core&l ...
- java基本类型和包装类型
int 是基本类型,直接存数值 Integer是类,产生对象时用一个引用指向这个对象 Java把内存划分成两种:一种是栈内存,另一种是堆内存 在函数中定义的一些基本类型的变量和对象的引用变 ...
- F - No Link, Cut Tree! Gym - 101484F
Marge is already preparing for Christmas and bought a beautiful tree, decorated with shiny ornaments ...
- Qt OpenCV 在界面显示图片 通过Lable方式 和GraphicsView 方式
1. 通过lable方式打开图片. 代码如下: void MainWindow::on_pushButton_clicked() { Mat srcImage,gray_image,srcImage1 ...
- idea整合mybatis逆向工程
--pom.xml添加插件 <build> <finalName>hnapi</finalName> <plugins> <plugin> ...
- B - Sequence II (HDU 5147)
Long long ago, there is a sequence A with length n. All numbers in this sequence is no smaller than ...
- Java逆向工程(数据库表生成java类)
说起来倒是挺简单的,就是听着名字感觉挺高大上.逆向工程方式有很多,比如mybatis就提供了一个这样的工具mybatis-genderator,这个我反正是没用过只是听说过,以前在公司都是用公司写好的 ...
- [LC] 40. Combination Sum II
Given a collection of candidate numbers (candidates) and a target number (target), find all unique c ...
- JVM简述
JVM的东西太多了,我们刚开始学java的时候,就会接触堆.栈,还有方法区,因为我们要知道new出来的对象放在哪里,局部变量放在哪里,static修饰的变量放在哪里. 我从网上截一个图: 这里有三大部 ...
- python数据类型:元组
python数据类型:元组 python的元组与列表类似,但是元组的元素不能修改 元组使用小括号,列表使用大括号 元组创建简单,只需要在括号中添加元素,使用逗号隔开 创建元组: tup1 = (50, ...