BackBone.js之Router
一、前言
有一段时间没有写随笔了,可能是最近的烦心事有点多。不倾诉了,开始我们的主题吧,以前做过一个web的聊天平台,js的代码足足有2k行。
虽然是在一个星期就完成了,但是想想还是不服。一定有一种更简单更快捷的方法,所以开始读《javascript设计模式》从而发现了BackBone.js
这个框架,自然就彻底学了一遍,而且也配合ASP.NET WEB API做了一些DEMO,如果当初使用这个框架或许2k行就变成500行了。下面我们
开始我们的学习之路。
二、小试牛刀(点此下载)
首先我们先看下面几个路径:
http://localhost:2746/Home/Home#help
http://localhost:2746/Home/Home#single/test1
http://localhost:2746/Home/Home#multip/test1/test2
某些人可能会认为是用来定位锚点的,但是在BackBone.js的路由中这些都是一个事件,并且还带有参数。
下面我们先定义一个路由:
var CustRoute = Backbone.Router.extend({
});
如果是没有javascript基础的人看到这串代码可能仅仅只是认为是执行一个函数而已,但是实际的功能却不是你想的那样简单。
实际的功能是新建一个类,并且这个类继承自Backbone.Router。(javascript并不存在实际意义上的类,仅仅只是通过某些技巧达到类的效果)。
然后我们继续往下,开始在这个类重写父类的方法:
var CustRoute = Backbone.Router.extend({
initialize: function () {
console.log("Route initialize");
}
});
在上面我们重写了父类中的initialize方法,这个方法会在实例化这个对象的时候被调用。下面我们写一段代码去实例化它:
$(function () {
new CustRoute();
Backbone.history.start();
});
这里我们还调用了 Backbone.history.start 方法,这个方法可以让我们在点击后退或者前进的时候同样会触发路由的事件。
这个时候你可以按F12看看console中是不是输出上面的字符串。
下面我们开始在其中添加路由的路径,添加的路由路径要求重写父类的routes这个对象,那么我们将上面的第一个路由路径实现:
var CustRoute = Backbone.Router.extend({
initialize: function () {
console.log("Route initialize");
},
routes: {
"help":"helpex"
},
helpex: function () {
console.log("helpex");
}
});
这个时候我们访问这个页面,然后在后面加上 #help 之后重新打开,然后查看console就可以看到输出的字符串了。当然你会认为这样
太鸡肋,还要手动输入,所以我们现在可以在页面中填上下面这个html标记:
<a href="#help" >help</a>
然后我们刷新页面,点击这个链接。可以看到 console 同样也输出了。
下面我们在路由的路径中加上参数,让触发的函数可以接收路径中的数据。我们继续添加对应的路由:
var CustRoute = Backbone.Router.extend({
initialize: function () {
console.log("Route initialize");
},
routes: {
"": "index",
"help": "help",
"single/:single": "fsingle",
"multip/:single/:multip": "fmultip"
},
index: function () {
console.log("index");
},
help: function () {
console.log("help");
},
fsingle: function (single) {
console.log("single:" + single);
},
fmultip: function (single, multip) {
console.log("multip:" + single + ":" + multip);
}
});
接着我们再添加如下的链接到页面中:
<div>
<a href="#help" >help</a>
<a href="#single/test1">single</a>
<a href="#single/test2">single2</a>
<a href="#multip/test1/test2">multip</a>
<a href="#multip/test2/test3">multip2</a>
</div>
接着我们依次点击这些链接,可以看到console正确的输出了路由路径中的数据,这里要特别注意的是路由路径中的参数以 : 开头
然后跟着这个参数的名称,并且在响应这个路由的事件中的参数命名也要和路由中的名称一摸一样否则你会发现你点击链接根本
没有任何反应,同时也不会报错。
提示:如果你要用Js代码去跳转到这个路由可以使用 对象名.navigate 方法即可。
到此为止我们简单的将路由路径学习过了,下面我将继续讲解其他的。
BackBone.js之Router的更多相关文章
- 用Backbone.js创建一个联系人管理系统(二)
欢迎大家回来继续这一教程,第一部分我们学习了model,collection和view在Backbone中的 基本用法,还有怎么样用主视图去绑定collection去渲染出每个Contact. 这部分 ...
- Backbone.js源码浅介
终于看到一个只有一千多行的js框架了,于是抱着一定可以看懂他的逻辑的心态,查看了他的整个源码,进去之后才发现看明白怎么用容易,看懂怎么写的就难了,于是乎有了这篇博客的标题:浅介,只能粗浅的介绍下Bac ...
- 全面解析JavaScript的Backbone.js框架中的Router路由
这篇文章主要介绍了Backbone.js框架中的Router路由功能,Router在Backbone中相当于一个MVC框架中的Controller控制器功能,需要的朋友可以参考下. Backbone ...
- MVC、MVP、MVVM、Angular.js、Knockout.js、Backbone.js、React.js、Ember.js、Avalon.js、Vue.js 概念摘录
注:文章内容都是摘录性文字,自己阅读的一些笔记,方便日后查看. MVC MVC(Model-View-Controller),M 是指业务模型,V 是指用户界面,C 则是控制器,使用 MVC 的目的是 ...
- Backbone.js应用基础
前言: Backbone.js是一款JavaScript MVC应用框架,强制依赖于一个实用型js库underscore.js,非强制依赖于jquery:其主要组件有模型,视图,集合,路由:与后台的交 ...
- 我对Backbone.js的一些认识
backbone.js已经不是当前最流行的前端框架了,但是对于我而言,依然具有比较好的学习价值.虽然目前来说,react,vue等mvvm框架非常火热,但是感觉自身还不到去使用这种框架的层次.这些技术 ...
- 前端mvc框架backbone.js入门[转]
原文地址:http://www.cnblogs.com/zhjh256/p/6083618.html 关于backbone.js的优缺点,这里就不详谈了,网上关于这方面的讨论很多了,而且各种框架之所以 ...
- 前端mvc框架backbone.js入门
关于backbone.js的优缺点,这里就不详谈了,网上关于这方面的讨论很多了,而且各种框架之所以长久生存,通常都是有其特定优势和擅长点的. 使用backbone.js作为前端框架的应用通常都是htm ...
- Backbone.js源码分析(珍藏版)
源码分析珍藏,方便下次阅读! // Backbone.js 0.9.2 // (c) 2010-2012 Jeremy Ashkenas, DocumentCloud Inc. // Backbone ...
随机推荐
- libstdc++.so.6: version `GLIBCXX_3.4.21' not found
问题: dotnet: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.18' not found (required by dotnet)dotnet ...
- 解读SSD中的Default box(Prior Box)
1:SSD更具体的框架如下: 2: Prior Box 缩进在SSD中引入了Prior Box,实际上与anchor非常类似,就是一些目标的预选框,后续通过softmax分类+bounding box ...
- [转]nginx下的url rewrite
转:http://zhengdl126.iteye.com/blog/698206 if (!-e $request_filename){rewrite "^/index\.html&quo ...
- C/C++log日志库比较
事实上,在C的世界里面没有特别好的日志函数库(就像Java里面的的log4j,或者C++的log4cxx).C程序员都喜欢用自己的轮子.printf就是个挺好的轮子,但没办法通过配置改变日志的格式或者 ...
- Shell bc命令进行数学运算
通常情况做简单的运算,很多命令里面都是支持的.比如for, awk等. #!/bin/bash num= #for循环这里的数字也是运算 #也可以使用 #也可以使用数组 ;i<=;++i)) d ...
- Asp.net WebAPi gzip压缩和json格式化
现在webapi越来越流行了,很多时候它都用来做接口返回json格式的数据,webapi原本是根据客户端的类型动态序列化为json和xml的,但实际很多时候我们都是序列化为json的,所以webapi ...
- PPPOE数据包转换及SharpPcap应用
在最近写的一个程序中需要用到Sniffer功能,但由于通过.net自身的Socket做出来的Sniffer不能达到实际应用的要求(如不能监听WIFI数据包)所以找到了WinPCAP的.NET库Shar ...
- RxJava RxPermissions 动态权限 简介 原理 案例 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- 用Visual C#来清空回收站(1)
视窗操作系统的回收站是对文件一种保护措施,他主要是作用是不言而喻的.在新的视窗2000系统之中,当我把文件删除到回收站中以后,按动"清空回收站"按钮,想清空回收站,此时往往提示&q ...
- CSDN日报20170226——《你离心想事成仅仅差一个计划》
[程序人生] 你离心想事成仅仅差一个计划 作者:安晓辉 从目标怎样导出工作计划.我们会以"出版一本小说"为例来解说计划的形成过程. 在開始之前.我们先来说明一个概念:目标的两种类型 ...