HTML5单页框架View.js介绍
什么是单页应用
单页应用,是指将用户视觉上的多个页面在技术上使用一个载体来实现的应用。
换句话来讲,用户视觉效果,与技术实现的载体,并不是一定要一一对应的。采取哪种技术方案,取决于产品设计、技术组成以及方案之间的优劣平衡。
放到 Web 前端环境中,这个承载了多个视觉效果的载体,就是 html 文件(或 asp,jsp 等)。
为便于描述,本文将使用多个术语。其名称及对应的含义如下所示:
页面:技术上的一个html文件;
视图:视觉上的一页内容;
初步实现单页应用
直观效果的单页应用,其实现过程其实并不复杂。
我们可以使用 div 或 section 等标签承载视图的展现,并通过脚本实现特定视图的呈现与隐藏。例如:
<!DOCTYPE HTML>
<html>
<head>...</head>
<body>
<div id = "view1" class = "view">page1</div>
<div id = "view2" class = "view">page2</div>
</body>
</html>
.view{
display: none;
}
.view.active{
display: block;
}
var find = function(selector){
return document.querySelector(selector);
}; find(".view.active").classList.remove("active");
find("#view2.view").classList.add("active");
这可能是最简单的单页应用了。
和其它框架相比,View.js为单页应用开发提供了的以下几个关键特性彰显了它的比较优势:
无需配置和开发,视图导航开箱可用
允许在视图切换时传递任意类型的参数
允许自定义视图切换动画
允许自定义视图配置
以事件驱动地形式完成视图功能的开发
View.js是为了简化移动端单页应用的功能开发而创建的,web前端开发者可以继续沿用既有技术栈,不会因为使用view.js而面临较大的冲击。
需要注意的是,和vue不同,对于使用View.js完成的单页应用,其HTML文档仍然由HTML、CSS和JS组成。开发者一如既往地需要手动建立html、css和js文件,并手动完成资源的引用。因为View.js的舞台,是浏览器装载文档之后的运行时环境。
视图导航
视图导航,在视图切换时由View.js自动完成。下面是一个例子
/* 切换至商品详情视图 */
View.navTo("goods-detail", {
options: {
goodsId: "G01"
}
});
视图切换后,页面URL将自动变更为:http://domain:port/context/index.html#goods-detail!goodsId=G01。
View.js当前仅支持hash形式的地址表示。
视图传参
View.js允许以视图为单位拆分任务,执行多人协作。视图之间使用参数完成协作。参数在进行视图切换时传递,如下所示:
View.navTo("goods-detail", {
options: {/* 使用options传递的参数将反馈到地址栏中,因此只能传递字符串类型的参数 */
goodsId: "G01"
}
}); /* ---------------------------------- */ View.navTo("delivery-address-list", {
params: {/* 使用params传递的参数不会反馈到地址栏中,因此可以是任意被浏览器所支持的类型 */
selectCallback: function(selectedAddress){
//...
}
}
}); /* ---------------------------------- */ View.navTo("goods-detail", {
params: {
goodsId: "G01",
},
options: {
goodsId: "G02"
}
}); var view = View.ofId("goods-detail");
view.on("enter", function(){
var goodsId = view.getParameter("goodsId");// --> G01
goodsId = View.getActiveViewOption("goodsId");// --> G02
goodsId = view.seekParameter("goodsId");// --> G01
});
视图配置
多数情况下,一个视图的表现和行为是固定的一种。但对于软件提供商,其同一产品在被多个客户购买时,会遇到“不同客户有不同需求,拒绝需求没收入,答应需求成本高”的窘境。而不同需求的差异点通常也并不高,可能也就只有10-30%左右的差别。但因为10%的差别,就要把源码硬拷贝2份,对于软件提供商而言,成本无疑高了许多。
View.js考虑到了这一点。
通过引入视图配置,开发者可以将视图开发为多种形态的综合体,最终以视图配置的方式指定视图的具体工作模式或表现形式。如下所示:
var view = View.ofId("register"); /* 默认配置:密码最少位数 */
view.config.get("password-min-length").setValue(6); /* 默认配置:密码最多位数 */
view.config.get("password-max-length").setValue(20); /* -------------------------------------------- */ view.find(".submit").addEventListener("click", function(){
var pwd = pwdObj.value.trim(); var minLen = view.config.get("password-min-length").getValue(),
maxLen = view.config.get("password-max-length").getValue(); if(pwd.length < min){
alert("密码长度不能少于" + minLen + "位");
return;
} if(pwd.length > max){
alert("密码长度不能多于" + maxLen + "位");
return;
}
}); /* -------------------------------------------- */ /* 客户A的视图配置 */ /* 重载既有配置:密码最少位数 */
view.config.get("password-min-length").setValue(10, true);/* 第二个参数用于复写可能已经存在的值,如果不传且已经有值,则赋值无效,相当于什么也没做 */ /* 重载默认配置:密码最多位数 */
view.config.get("password-max-length").setValue(20, true); /* -------------------------------------------- */ /* 客户B的视图配置 */ /* 重载既有配置:密码最少位数 */
view.config.get("password-min-length").setValue(4, true); /* 重载默认配置:密码最多位数 */
view.config.get("password-max-length").setValue(10, true);
事件驱动
开发者通过监听视图的相关事件来决定执行特定操作的时机。View.js为每个视图实例预制了如下几个事件:
ready - 视图就绪,在视图第一次进入时触发;
beforeenter - 视图即将进入
enter - 视图进入
afterenter - 视图进入后
leave - 视图离开
除此之外,开发者还可以根据自己的业务需要,自行发起并消费事件,如下所示:
var view = View.ofId("myView");
view.on("myevent", function(e){
view.logger.debug("Event name: {}, event data: {}", e.name, e.data);
});
//…
view.fire("myevent", {a: 1});//-> 0918 10:20:54 [View#myView]: Event name: null, event data: {"a":1}
HTML5单页框架View.js介绍的更多相关文章
- 你应该知道的10个奇特的 HTML5 单页网站
网页设计师努力寻找新的方式来展现内容.其中一个大的趋势是单页网站,现在被世界上的一些大的品牌广泛采用,使用它们来为用户提供一个快速,干净和简单的而且美丽的网站. 下面是10个令人惊叹的单页 H ...
- HTML5网站大观:15个精美的 HTML5 单页网站作品欣赏
HTML5 是现在Web开发领域的热点,更多的开发人员开始使用HTML5来开发交互性强.效果出众的Web应用和游戏.今天,本文收集了15个精美的 HTML5 单页网站作品,让大家感受一下 HTML5 ...
- SEO黑页以及门页框架和JS跳转实现方法
在去年大家还在针对第三方博客狂轰乱炸,比如:webs.com.blogspot.com.weebly.com主要是因为本身博客平台的权重,再就是低廉的成本,主需要注册,没有域名和服务器的投入.排名也非 ...
- 【单页应用之通信机制】view之间应该如何通信
前言 在单页应用中,view与view之间的通信机制一直是一个重点,因为单页应用的所有操作以及状态管理全部发生在一个页面上 没有很好的组织的话很容易就乱了,就算表面上看起来没有问题,事实上会有各种隐忧 ...
- 精品素材:WALK & RIDE 单页网站模板下载
今天,很高兴能向大家分享一个响应式的,简约风格的 HTML5 单页网站模板.Walk & Ride 这款单页网站模板是现代风格的网页模板,简洁干净,像素完美,特别适合用于推广移动 APP 应用 ...
- Web API 2 入门——使用ASP.NET Web API和Angular.js构建单页应用程序(SPA)(谷歌翻译)
在这篇文章中 概观 演习 概要 由网络营 下载网络营训练包 在传统的Web应用程序中,客户机(浏览器)通过请求页面启动与服务器的通信.然后,服务器处理请求,并将页面的HTML发送给客户端.在与页面的后 ...
- 【入门篇】前端框架Vue.js知识介绍
一.Vue.js介绍 1.什么是MVVM? MVVM(Model-View-ViewModel)是一种软件架构设计模式,它源于MVC(Model-View-Controller)模式,它是一种思想,一 ...
- 【单页应用】view与model相关梳理(转载)
[单页应用]view与model相关梳理 前情回顾 根据之前的学习,我们形成了一个view与一个messageCenterview这块来说又内建了一套mvc的东西,我们这里来理一下首先View一层由三 ...
- html5手机Web单页应用实践--起点移动阅读
一开始以hybrid形式做了一个android的小说阅读客户端,叫4G阅读.而后由于业务需求,要迅速实现纯手机html5 版的,所以就直接在原先客户端内内嵌的网页进行改版,快速实现以后在优化的过程中发 ...
随机推荐
- 洛谷P2730 [IOI]魔板 Magic Squares
题目背景 在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 5 题目描述 我们知道魔板的每一个方格都有一种颜色.这8种颜 ...
- 二分法python实现
聚会游戏,一个人想一个数,其他人来猜,然后告诉你猜大了还是小了,直到猜到这个数. 二分法和猜数游戏类似,只不过猜的时候一定猜最中间的那个数,折半查找所需内容,就数组来说,数组越长,梯度下降越快,二分查 ...
- Hyperspectral Image Classification Using Similarity Measurements-Based Deep Recurrent Neural Networks
用RNN来做像素分类,输入是一系列相近的像素,长度人为指定为l,相近是利用像素相似度或是范围相似度得到的,计算个欧氏距离或是SAM. 数据是两个高光谱数据 1.Pavia University,Ref ...
- 使用JS计算前一天和后一天
使用JS实现前一天和后一天 首先,我们先在html中写两个按钮来进行简单操作 <button onclick="Before()">前一天</button> ...
- 第07组 Beta冲刺(3/5)
队名:摇光 队长:杨明哲 组长博客:求戳 作业博客:求再戳 队长:杨明哲 过去两天完成了哪些任务 文字/口头描述:代码编辑器,目前没什么进展 展示GitHub当日代码/文档签入记录:(组内共用,已询问 ...
- Unity3D Substance designer Sub 欧洲小镇场景制作视频教程 中文字幕
大小6.53G,中文字幕 扫码时备注或说明中留下邮箱 付款后如未回复请至https://shop135452397.taobao.com/ 联系店主
- docker vim右键进入visual模式无法粘贴
右键不能粘贴,反而进入了visual模式, vim版本:version 8.0.707 修改方法: vim /usr/share/vim/vim80/defaults.vim 第70行 在mouse= ...
- electron---项目打包
创建一个应用目录:app,里面需要有必要的三个文件: index.html <!DOCTYPE html> <html> <head> <meta chars ...
- null undefined NaN
数据类型 6大基本 Number String Boolean Undefined Null. Symbol (ES6) 3大引用类型 object array Function Regexp ...
- django后台list_display中添加自定义字段
list_display = ("apply_prove",) def apply_prove(self, obj): : return "<a href='/' ...