View

static currentState

获取当前的浏览状态。
签名:
View.currentState: ViewState
可用版本:1.6.2+
返回:
当前的浏览状态,反映了当前活动视图的浏览信息。

static context

公用数据存取上下文,用于跨视图存取数据。 当需要抽取变量,使得可以跨视图访问时,开发者应当尽可能地使用公用上下文,而非 window,以降低变量污染的可能。
签名:
View.context: ViewContext
可用版本:1.6.2+
返回:
公用的数据存取上下文。

static checkIfBrowserHistorySupportsPushPopAction()

判断浏览器的 history 对象是否支持 pushState API。
签名:
View.checkIfBrowserHistorySupportsPushPopAction(): boolean
可用版本:1.6.2+
入参:
返回:
true - 浏览器的 history 对象支持 pushState API。否则返回 false

static getViewContainerDomElement()

获取视图容器对应的 DOM 元素。
签名:
View.getViewContainerDomElement(): HTMLElement
可用版本:1.6.2+
入参:
返回:
视图容器对应的 DOM 元素。如果开发者没有另外设置,将返回 document.body

static find()

从 DOM 树中获取匹配给定选择器的 DOM 元素。
签名:
View.find(rootObj?: HTMLElement, selector: string): HTMLElement
可用版本:1.6.2+
入参:
  • rootObj?: HTMLElement - 检索 DOM 元素的根元素,可选。默认为视图容器。
  • selector: string - 选择器。
返回:
给定根元素下,匹配给定选择器的 DOM 元素。如果没有 DOM 元素与之对应,则返回 null
调用举例:
1
/**
2
* 从 视图容器 中检索 class 名包含 btn 的 DOM 元素
3
*/
4
var btnObj = View.find(".btn");
5
6
/**
7
* 从 containerObj 中检索 class 名包含 btn 的 DOM 元素
8
*/
9
btnObj = View.find(containerObj, ".btn");
10
Copied!

static findAll()

从 DOM 树中获取匹配给定选择器的多个 DOM 元素。
签名:
View.findAll(rootObj?: HTMLElement, selector: string): NodeList | null
可用版本:1.6.2+
入参:
  • rootObj?: HTMLElement - 检索 DOM 元素的根元素,可选。默认为视图容器。
  • selector: string - 选择器。
返回:
给定根元素下,匹配给定选择器的多个 DOM 元素。如果给定的 rootObjnull ,则返回 null

static ofId()

获取视图实例。
签名:
View.ofId(viewId: string, viewNamespace?: string): View
可用版本:1.6.2+
入参:
  • viewId: string - 视图ID。
  • viewNamespace?: string - 视图隶属的命名空间。可选,默认为:default
返回:
匹配的视图实例。
如果视图容器中没有 DOM 元素与给定的 ID 和 命名空间 匹配,则抛出异常。

static ifExists()

判断视图是否存在。
签名:
View.ifExists(viewId: string, viewNamespace?: string): boolean
可用版本:1.6.2+
入参:
  • viewId: string - 视图ID。
  • viewNamespace?: string - 视图隶属的命名空间。可选,默认为:default
返回:
true - 视图存在,false - 视图不存在。
如果在 View.js 完成初始化之前调用该方法,无论视图是否真正存在,都将返回 false

static listAll()

列举所有视图。
签名:
View.listAll(viewName?: string): View[]
可用版本:1.6.2+
入参:
  • viewName?: string - 视图名称,可选。如果为空,则返回所有视图实例。否则返回声明为该名称的视图实例。不区分大小写。
返回:
匹配给定名称的,或者所有实例化的视图实例组成的数组。

static listAllViewNames()

列举被视图声明了的所有视图名称。
签名:
View.listAllViewNames(): string[]
可用版本:1.6.2+
入参:
无。
返回:
被视图声明的所有视图名称。如果没有任何视图声明有视图名称,将返回空数组。
视图名称在视图的 DOM 骨架上,使用 data-view-name 属性声明。

static setAsDefault()

设置给定的视图为默认视图。
签名:
View.setAsDefault(viewId: string, viewNamespace?: string): View
可用版本:1.6.2+
入参:
  • viewId: string - 视图ID。
  • viewNamespace?: string - 视图隶属的命名空间。可选,默认为:default
返回:
window.View 以供开发者链式调用。

static isDirectlyAccessible()

判断所有视图默认是否可以直接访问。
签名:
View.isDirectlyAccessible(): boolean
可用版本:1.6.2+
入参:
无。
返回:
true - 视图默认可以直接访问,false - 视图默认不可以直接访问。
如果没有单独声明,视图将使用该默认值决定自己是否可以直接访问。

static setIsDirectlyAccessible()

设置所有视图默认是否可以直接访问。
签名:
View.setIsDirectlyAccessible(isDirectlyAccessible: boolean): View
可用版本:1.6.2+
入参:
  • isDirectlyAccessible: boolean - 是否可以直接访问。
返回:
window.View 以供开发者链式调用。

static setViewIsDirectlyAccessible()

设置特定视图是否可以直接访问。
签名:
View.setIsDirectlyAccessible(viewId: string, viewNamespace?: string, isDirectlyAccessible: boolean): View
可用版本:1.6.2+
入参:
  • viewId: string - 视图ID。
  • viewNamespace?: string - 视图隶属的命名空间。可选,默认为:default
  • isDirectlyAccessible: boolean - 是否可以直接访问。
返回:
window.View 以供开发者链式调用。
有别于 viewInstance.setIsDirectlyAccessible() ,该方法可以在 View.js 完成初始化之前调用。

static getActiveView()

获取当前的活动视图。
签名:
View.getActiveView(): View | null
可用版本:1.6.2+
入参:
无。
返回:
当前处于活动状态的视图。如果没有视图处于活动状态(如:View.js 尚未完成初始化),则返回 null

static getDefaultView()

获取默认视图。
签名:
View.getDefaultView(): View | null
可用版本:1.6.2+
入参:
无。
返回:
默认视图。如果 View.js 尚未完成初始化,则返回 null

static getSwitchAnimation()

获取设置的视图跳转动画执行器。
签名:
View.getSwitchAnimation(): ViewSwitchAnimation | null
可用版本:1.6.2+
入参:
无。
返回:
设置的视图跳转动画执行器。如果没有设置,则返回 null

static setSwitchAnimation()

设置视图跳转动画执行器。
签名:
View.setSwitchAnimation(animation: ViewSwitchAnimation): View
可用版本:1.6.2+
入参:
无。
返回:
window.View 以供开发者链式调用。

static getActiveViewOptions()

获取体现在地址栏中的,当前活动视图的视图选项集合。
签名:
View.getActiveViewOptions(): Object | null
可用版本:1.6.2+
入参:
无。
返回:
当前活动视图的视图选项集合。视图选项以 key-value 的形式存放在集合中。如果没有任何视图选项,则返回 null
调用举例:
1
var options = View.getActiveViewOptions();
2
3
var paramValue1 = options["param-name1"],
4
paramvalue2 = options.paramName2;
5
Copied!

static hasActiveViewOptions()

判断当前活动视图的视图选项集合中,是否含有给定键名的参数。
签名:
View.hasActiveViewOptions(name: string): boolean
可用版本:1.6.2+
入参:
  • name: string - 参数的键名。
返回:
true - 视图选项集合不为 null ,且集合中含有 key 为给定键名的数据。否则,返回 false

static getActiveViewOptions()

从当前活动视图的视图选项集合中,获取给定键名的参数取值。
签名:
View.getActiveViewOptions(name: string): string | null
可用版本:1.6.2+
入参:
  • name: string - 参数的键名。
返回:
参数取值。如果集合为 null ,或参数不存在,则返回 null

static setActiveViewOptions()

为当前活动视图设置视图选项。
签名:
View.setActiveViewOptions(name: string, value: string): View
可用版本:1.6.2+
入参:
  • name: string - 参数的键名。
  • value: string - 参数的取值。
返回:
window.View 以供开发者链式调用。

static passBy()

“穿过”视图,用于在不渲染界面、不触发关联事件的情况下 “伪造” 视图的访问记录。
该方法自 1.7.0 开始被废弃(仍然可用),开发者可使用等价的 View.navBy() 替代。
签名:
View.passBy(viewId: string, viewNamespace?: string): View
可用版本:1.6.2+
入参:
  • viewId: string - 视图ID。
  • viewNamespace?: string - 视图隶属的命名空间。可选,默认为:default
返回:
window.View 以供开发者链式调用。
调用举例:
1
/**
2
* 导航至 我的银行卡列表 界面。
3
*
4
* 通过伪造 profile 的访问记录,实现 “虽然用户看到的是 银行卡列表 界面,
5
* 但点击页面中的返回按钮,将返回到 个人中心 界面”的目的
6
*/
7
View.passBy("profile").navTo("my-bankcard-list");
8
9
/**
10
* 1秒后页面将返回至 个人中心
11
*/
12
setTimeout(function(){
13
View.back();
14
}, 1000);
Copied!

static navBy()

以 压入堆栈 的方式 “略过” 视图,用于在不渲染界面、不触发关联事件的情况下 “伪造” 视图的访问记录。
签名:
View.navBy(viewId: string, viewNamespace?: string): View
可用版本:1.7.0+
入参:
  • viewId: string - 视图ID。
  • viewNamespace?: string - 视图隶属的命名空间。可选,默认为:default
返回:
window.View 以供开发者链式调用。
调用举例:
1
/**
2
* 导航至 我的银行卡列表 界面。
3
*
4
* 通过伪造 profile 的访问记录,实现 “虽然用户看到的是 银行卡列表 界面,
5
* 但点击页面中的返回按钮,将返回到 个人中心 界面”的目的
6
*/
7
View.navBy("profile").navTo("my-bankcard-list");
8
9
/**
10
* 1秒后页面将返回至 个人中心
11
*/
12
setTimeout(function(){
13
View.back();
14
}, 1000);
Copied!

static changeBy()

以 替换栈顶 的方式 “略过” 视图,用于在不渲染界面、不触发关联事件的情况下 “伪造” 视图的访问记录。
签名:
View.changeBy(viewId: string, viewNamespace?: string): View
可用版本:1.7.0+
入参:
  • viewId: string - 视图ID。
  • viewNamespace?: string - 视图隶属的命名空间。可选,默认为:default
返回:
window.View 以供开发者链式调用。
调用举例:
1
/**
2
* 导航至 我的银行卡列表 界面。
3
*
4
* 通过伪造 my-wallet 的访问记录,实现 “虽然用户看到的是 银行卡列表 界面,
5
* 但点击页面中的返回按钮,将返回到 我的钱包 界面”的目的
6
*/
7
View.navTo("profile").changeBy("my-wallet").navTo("my-bankcard-list");
8
9
/**
10
* 1秒后页面将返回至 我的钱包
11
*/
12
setTimeout(function(){
13
View.back();
14
}, 1000);
Copied!

static navTo()

以 压入堆栈 的方式跳转至目标视图。
签名1:
View.navTo(viewId: string, viewNamespace?: string, ctrl: ViewSwitchCtrl): View
可用版本:1.6.2+
签名2:
View.navTo(viewInstance: View): View
可用版本:1.7.0+
入参:
  • viewId: string - 视图ID,或视图名称,或伪视图,或外部链接。
支持的伪视图包括:
  • :back - 前进,等同于 View.back()
  • :forward - 后退,等同于 View.forward()
  • :default-view - 默认视图;
例如:
1
/**
2
* 后退,等同于 View.back()
3
*
4
* 第一个参数指定了跳转目标;
5
* 第二个参数指定了跳转控制选项,其中,关键字:'params' 用于指定视图参数集合。
6
*/
7
View.navTo(":back", {
8
params: {
9
paramName1: "boo"
10
}
11
});
12
13
/**
14
* 后退,等同于 View.forward()
15
*/
16
View.navTo(":forward", {
17
params: {
18
paramName1: "boo"
19
}
20
});
21
22
/**
23
* 跳转至默认视图
24
* 第二个参数指定了跳转控制选项,其中,关键字:'options' 用于指定视图选项集合。
25
*/
26
View.navTo(":default-view", {
27
params: {
28
paramName1: "boo"
29
},
30
options: {
31
paramName2: "foo"
32
}
33
});
Copied!
当为视图名称时,需要使用 ~ 符号前缀,例如:
1
/**
2
* 跳转至视图名称为 profile 的第一个视图上去
3
*/
4
View.navTo("~profile"{
5
params: {
6
param1: "value1"
7
},
8
options: {
9
param2: "value2"
10
}
11
});
Copied!
当为外部链接,且链接地址为完整路径时,可以直接赋值为链接地址,例如:
1
/**
2
* 跳转至完整的外部链接
3
*/
4
View.navTo("http://view-js.com");
Copied!
如果外部链接地址不完整,则需要使用 @ 符号前缀,例如:
1
/**
2
* 跳转至当前目录下的 index.html 页面
3
*/
4
View.navTo("@index.html");
Copied!
  • viewNamespace?: string - 视图隶属的命名空间。可选,默认为:default
  • ctrl?: ViewSwitchCtrl - 视图跳转控制。可选。
  • viewInstance: View - 视图实例。
返回:
window.View 以供开发者链式调用。
调用举例:
1
/**
2
* 以“压入堆栈”的方式跳转至 myNamespace 命名空间下, ID为 targetVieWId 的视图
3
*
4
* 第一个参数指定了跳转目标;
5
* 第二个参数指定了跳转控制选项,其中,关键字:'params' 用于指定视图参数集合,
6
* 'options' 用于指定视图选项集合。
7
*/
8
View.navTo("targetViewId", "myNamespace", {
9
10
/**
11
* 开发者可以在视图参数集合指定任意数量的参数,参数取值可以是
12
* 任意合法的js类型
13
*/
14
params: {
15
paramName1: "boo",/* 传导字符串 */
16
paramName2: true,/* 传导枚举值 */
17
paramName3: ['str', 123, false, new Object()],/* 传导数组 */
18
paramName4: View.find(".container"),/* 传导DOM元素 */
19
paramName5: function(data){doSth(data);}/* 传导回调方法 */
20
},
21
22
/**
23
* 视图选项只支持字符串类型
24
*/
25
options: {
26
paramName1: "boo"
27
paramName2: "bar"
28
}
29
30
});
Copied!
1.7.0 开始,开发者可以通过 View.addSwitchInterceptor() 方法添加拦截器,阻止视图跳转动作的执行。

static changeTo()

以 替换栈顶 的方式跳转至目标视图。
签名1:
View.changeTo(viewId: string, viewNamespace?: string, ctrl: ViewSwitchCtrl): View
可用版本:1.6.2+
签名2:
View.changeTo(viewInstance: View): View
可用版本:1.7.0+
入参:
  • viewId: string - 视图ID,或视图名称,或伪视图,或外部链接。
支持的伪视图包括:
  • :default-view - 默认视图;
例如:
1
/**
2
* 跳转至默认视图
3
* 第二个参数指定了跳转控制选项,其中,关键字:'options' 用于指定视图选项集合。
4
*/
5
View.changeTo(":default-view", {
6
params: {
7
paramName1: "boo"
8
},
9
options: {
10
paramName2: "foo"
11
}
12
});
Copied!
当为视图名称时,需要使用 ~ 符号前缀,例如:
1
/**
2
* 跳转至视图名称为 profile 的第一个视图上去
3
*/
4
View.changeTo("~profile"{
5
params: {
6
param1: "value1"
7
},
8
options: {
9
param2: "value2"
10
}
11
});
Copied!
当为外部链接,且链接地址为完整路径时,可以直接赋值为链接地址,例如:
1
/**
2
* 跳转至完整的外部链接
3
*/
4
View.changeTo("http://view-js.com");
Copied!
如果外部链接地址不完整,则需要使用 @ 符号前缀,例如:
1
/**
2
* 跳转至当前目录下的 index.html 页面
3
*/
4
View.changeTo("@index.html");
Copied!
  • viewNamespace?: string - 视图隶属的命名空间。可选,默认为:default
  • ctrl?: ViewSwitchCtrl - 视图跳转控制。可选。
  • viewInstance: View - 视图实例。
返回:
window.View 以供开发者链式调用。
1.7.0 开始,开发者可以通过 View.addSwitchInterceptor() 方法添加拦截器,阻止视图跳转动作的执行。

static addSwitchInterceptor()

添加视图跳转拦截器。
签名:
View.addSwitchInterceptor(interceptor: ViewSwitchInterceptor): View
可用版本:1.7.0+
入参:
  • interceptor: ViewSwitchInterceptor - 拦截器。
返回:
window.View 以供开发者链式调用。
调用举例:
1
/**
2
* 添加拦截器:“修改密码” 页面要求登录
3
*/
4
View.addSwitchInterceptor(function(meta){
5
var targetViewId = meta.targetView.id;
6
/* 如果目标视图不是 “修改密码”,则放行 */
7
if("change-password" !== targetViewId)
8
return true;
9
10
if(user.isLogined())
11
return true;
12
13
toast("请登录");
14
//...
15
16
return false;
17
});
18
19
/**
20
* 添加拦截器:“删除商品” 页面要求有权限
21
*/
22
View.addSwitchInterceptor(function(meta){
23
var targetViewId = meta.targetView.id;
24
/* 如果目标视图不是 “删除商品”,则放行 */
25
if("delete-goods" !== targetViewId)
26
return true;
27
28
if(user.isAuthorized(targetViewId))
29
return true;
30
31
toast("没有权限");
32
//...
33
34
return false;
35
});
Copied!
拦截器将按添加顺序顺序执行。

static getSwitchInterceptors()

获取添加的视图跳转拦截器列表。顺序与添加顺序保持一致。
签名:
View.getSwitchInterceptors(): ViewSwitchInterceptor[]
可用版本:1.7.0+
入参:
无。
返回:
与添加顺序保持一致的视图跳转拦截器列表。

static setNoViewToNavBackAction()

设置在“没有视图可以继续向前返回”的情况下,尝试返回时要执行的动作。 开发者可以借助该特性,实现 “没有页面可以继续向前返回时,跳转至首页” 的效果。
签名:
View.setNoViewToNavBackAction(action: Function): View
可用版本:1.6.2+
入参:
  • action: Function - 要执行的动作。
返回:
window.View 以供开发者链式调用。
调用举例:
1
View.setNoViewToNavBackAction(function(){
2
View.changeTo(":default-view");
3
});
Copied!

static back()

返回至上一个视图。
签名:
View.back(ctrl?: ViewBackForwardCtrl): View
可用版本:1.6.2+
入参:
返回:
window.View 以供开发者链式调用。

static forward()

前进至下一个视图。
签名:
View.forward(ctrl?: ViewBackForwardCtrl): View
可用版本:1.6.2+
入参:
返回:
window.View 以供开发者链式调用。

static setDocumentTitle()

设置文档标题。 在视图之间发生跳转时,View.js 会自动使用目标视图定义的标题更新文档标题。如果目标视图没有定义标题,则会使用初始化阶段捕获的浏览器标题呈现。如果初始化阶段的文档不是文档的最终标题,开发者需要在适当时机执行该方法。 View.js 默认在 DOMContentloaded 事件触发后进行初始化。
签名:
View.setDocumentTitle(title: string): View
可用版本:1.6.2+
入参:
  • title: string - 文档标题。
返回:
window.View 以供开发者链式调用。

static reDoLayout()

执行所有视图的布局动作。 每个视图实例都可以通过 setLayoutAction() 方法设置自己的布局动作。布局动作默认在视图进入时由 View.js 自动执行。必要时,开发者可以通过调用本方法强制所有视图重新布局。
签名:
View.reDoLayout(): View
可用版本:1.6.2+
入参:
无。
返回:
window.View 以供开发者链式调用。

static ifCanGoBack()

判断是否可以继续向前返回。亦即,历史堆栈中,是否还有更早的视图浏览记录。
签名:
View.ifCanGoBack(): boolean
可用版本:1.6.2+
入参:
无。
返回:
true - 可以继续向前返回;false - 已经返回到底了。

static beforeInit()

添加 View.js 初始化前要执行的处理器。
签名:
View.beforeInit(action: Function): View
可用版本:1.6.2+
入参:
  • action: Function - 处理器。
返回:
window.View 以供开发者链式调用。
所有处理器均以 同步 的方式被触发。

static ready()

添加 View.js 就绪后要执行的处理器。
签名:
View.ready(action: Function): View
可用版本:1.6.2+
入参:
  • action: Function - 处理器。
返回:
window.View 以供开发者链式调用。
所有处理器均以 同步 的方式被触发。

static setInitializer()

设置 View.js 的初始化触发器。
签名:
View.setInitializer(initializer: ViewInitializer, execTime?: ViewInitializeTime): View
可用版本:1.6.2+
入参:
返回:
window.View 以供开发者链式调用。
1.7.0 开始,本方法被标记为 “已废弃” (仍然可用),建议开发者使用新增的 View.init() 方法实现手动初始化 。

static init()

初始化 View.js 。
签名:
View.init(): View
可用版本:1.7.0+
入参:
无。
返回:
window.View 以供开发者链式调用。

static on()

添加宏观事件监听器。预置的宏观事件包括: 1. beforechange - 活动视图即将切换(同步触发) 2. change - 活动视图正在切换(同步触发) 3. afterchange - 活动视图切换完成(异步触发)
开发者也可以使用该方法监听自定义事件。
签名:
View.on(eventName: string, handle: ViewEventListener): View
可用版本:1.6.2+
入参:
返回:
window.View 以供开发者链式调用。
调用举例:
1
/**
2
* 监听预置事件
3
*/
4
View.on("change", function(e){
5
var info = e.data;
6
7
/**
8
* 跳转到的目标视图
9
*/
10
var targetView = e.data.targetView;
11
//...
12
});
13
14
/**
15
* 监听自定义事件
16
*/
17
View.on("myEvent", function(e){
18
var data = e.data;
19
// doSth(data);
20
});
Copied!

static off()

移除宏观事件监听器。预置的宏观事件包括: 1. beforechange - 活动视图即将切换(同步触发) 2. change - 活动视图正在切换(同步触发) 3. afterchange - 活动视图切换完成(异步触发)
签名:
View.off(eventName: string, handle: ViewEventListener): View
可用版本:1.6.2+
入参:
返回:
window.View 以供开发者链式调用。

static fire()

发起宏观事件。
签名:
View.fire(eventName: string, data?: any): View
可用版本:1.6.2+
入参:
  • eventName: string - 事件名称。
  • data?: any - 事件关联数据 。
返回:
window.View 以供开发者链式调用。
调用举例:
1
/**
2
* 监听 "myEvent" 事件
3
*/
4
View.on("myEvent", function(e){
5
console.log(e.data["key2"]);
6
});
7
8
/**
9
* 触发事件:"myEvent",并携带自定义数据
10
*/
11
View.fire("myEvent", {
12
"key1": "value1",
13
"key2": 123,
14
"key3": true
15
});
16
17
// 控制台异步输出 123
Copied!

static SWITCHTYPE_HISTORYFORWARD

视图切换方式:浏览器前进。只读。
签名:
View.SWITCHTYPE_HISTORYFORWARD: string
可用版本:1.6.2+

static SWITCHTYPE_HISTORYBACK

视图切换方式:浏览器后退。只读。
签名:
View.SWITCHTYPE_HISTORYBACK: string
可用版本:1.6.2+

static SWITCHTYPE_VIEWNAV

视图切换方式:“压入堆栈” 式前进。只读。
签名:
View.SWITCHTYPE_VIEWNAV: string
可用版本:1.6.2+

static SWITCHTYPE_VIEWCHANGE

视图切换方式:“替换栈顶” 式前进。只读。
签名:
View.SWITCHTYPE_VIEWCHANGE: string
可用版本:1.6.2+

static SWITCHTRIGGER_APP

视图跳转动作触发来源:应用程序。只读。
签名:
View.SWITCHTRIGGER_APP: string
可用版本:1.6.2+

static SWITCHTRIGGER_NAVIGATOR

视图跳转动作触发来源:浏览器。只读。
签名:
View.SWITCHTRIGGER_NAVIGATOR: string
可用版本:1.6.2+

id

获取视图的ID。只读。
签名:
viewInstance.id: string
可用版本:1.6.2+
返回:
视图的ID。

namespace

获取视图隶属的命名空间。只读。
签名:
viewInstance.namespace: string
可用版本:1.6.2+
返回:
视图隶属的命名空间。
除非另外声明,否则视图的命名空间将默认为:default

logger

获取视图内置的日志句柄。只读。
签名:
viewInstance.logger: View.Logger
可用版本:1.6.2+
返回:
视图内置的日志数据句柄。

config

获取视图内置的配置集合。只读。
签名:
viewInstance.config: ViewConfigurationSet
可用版本:1.6.2+
返回:
视图内置的配置集合。

context

获取视图内置的数据存取上下文。只读。
签名:
viewInstance.context: ViewContext
可用版本:1.6.2+
返回:
视图内置的数据存取上下文。

getId()