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.所以获取宽高时 ...
随机推荐
- [原]CreateFile中的dwShareMode
原 总结 API 一直对CreateFile的参数dwDesiredAccess和dwShareMode有什么不同不是很清楚,今天重读 windows核心编程的时候终于豁然开朗了. 真是书读百遍,其 ...
- linkage disequilibrium|linkage equilibrium
I.9 Linkage INDEPENDENCE OF GENOTYPES AT TWO LOCI:若A,B是两个独立位点:PA是基因A的概率,PB是基因B的概率.因为基因A与基因B是相互独立的位点, ...
- python学习——tuple
tuple 上次谈到了列表,而这次所谈的元组其实和列表有许多相似的地方,故元组又叫"戴上了枷锁的列表".这是因为元组不能改动内部的元素,所以就不能使用上次谈到的append.ext ...
- Win10卸载python总是提示error2503失败各种解决办法
最近win10的电脑装了python的3.4,然后想卸载,就总是提示error 2053,类似于这种: 下面是我的坎坷解决之路: 1.网上说,任务管理器 --> 详细信息 --> expl ...
- [GX/GZOI2019]旧词(树上差分+树剖+线段树)
考虑k=1的做法:这是一道原题,我还写过题解,其实挺水的,但当时我菜还是看题解的:https://www.cnblogs.com/hfctf0210/p/10187947.html.其实就是树上差分后 ...
- Pickle的简单使用
单词Pickle的中文意思是“泡菜.腌菜.菜酱”的意思,Pickle是Python的一个包,主要功能是对数据进行序列化和反序列化.那么什么叫序列化和反序列化呢? 其序列化过程就是把数据转化成二进制数据 ...
- CI_CD(jenkins)公司实战_未完成版
环境准备 #三台服务器,不同的ip centos 镜像时:CentOS Linux release 7.6.1810 (Core) gitlab-ce 版本是:11.11.3 jenkins ...
- 《C 程序设计语言》练习1-4
#include<stdio.h> /*当celsius=0,1,...,100时,打印摄氏温度与华氏温度对照表; 浮点数版本*/ main () { float fahr,celsius ...
- [LC] 225. Implement Stack using Queues
Implement the following operations of a stack using queues. push(x) -- Push element x onto stack. po ...
- 吴裕雄--天生自然python学习笔记:网页解析
抓取万水书苑网页中所有<a>标签中的超链接井显示. import requests from bs4 import BeautifulSoup url = 'http://www.wsbo ...