注:director.js的官网 https://github.com/flatiron/director

director.js是什么?

理解:前端的route框架,director.js客户端的路由注册/解析器,在不刷新的情况下,利用“#”号组织不同的URL路径,并根据不同的URL路径进行不同的方法调用。意思就是有什么样的路径就有什么样的方法。

场合:客户端浏览器和node.js的服务器应用。非常适合用来开发不需要刷新的单页面应用程序以及node.js应用。

兼容性:不依赖与任何库。例如jquery等。但它又和jquery能很好的融合在一起; 
客户端的路由: 
客户端的路由 (也称为哈希路由) 允许您指定一些关于使用URL应用状态的信息,当用户指定固定的URL,进行相应的页面显示。

简单例子

1. 单独使用

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>A Gentle Introduction</title>
  6. <script
  7. src="https://rawgit.com/flatiron/director/master/build/director.min.js">
  8. </script>
  9. <script>
  10. var author = function () { console.log("author"); };
  11. var books = function () { console.log("books"); };
  12. var viewBook = function (bookId) {
  13. console.log("viewBook: bookId is populated: " + bookId);
  14. };
  15. var routes = {
  16. '/author': author,
  17. '/books': [books, function() {
  18. console.log("An inline route handler.");
  19. }],
  20. '/books/view/:bookId': viewBook
  21. };
  22. var router = Router(routes);
  23. router.init();
  24. </script>
  25. </head>
  26. <body>
  27. <ul>
  28. <li><a href="#/author">#/author</a></li>
  29. <li><a href="#/books">#/books</a></li>
  30. <li><a href="#/books/view/1">#/books/view/1</a></li>
  31. </ul>
  32. </body>
  33. </html>

2当与jquery相结合

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>A Gentle Introduction 2</title>
  6. <script
  7. src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js">
  8. </script>
  9. <script
  10. src="https://rawgit.com/flatiron/director/master/build/director.min.js">
  11. </script>
  12. <script>
  13. $('document').ready(function() {
  14. //
  15. // create some functions to be executed when
  16. // the correct route is issued by the user.
  17. //
  18. var showAuthorInfo = function () { console.log("showAuthorInfo"); };
  19. var listBooks = function () { console.log("listBooks"); };
  20. var allroutes = function() {
  21. var route = window.location.hash.slice(2);
  22. var sections = $('section');
  23. var section;
  24. section = sections.filter('[data-route=' + route + ']');
  25. if (section.length) {
  26. sections.hide(250);
  27. section.show(250);
  28. }
  29. };
  30. //
  31. // define the routing table.
  32. //
  33. var routes = {
  34. '/author': showAuthorInfo,
  35. '/books': listBooks
  36. };
  37. //
  38. // instantiate the router.
  39. //
  40. var router = Router(routes);
  41. //
  42. // a global configuration setting.
  43. //
  44. router.configure({
  45. on: allroutes
  46. });
  47. router.init();
  48. });
  49. </script>
  50. </head>
  51. <body>
  52. <section data-route="author">Author Name</section>
  53. <section data-route="books">Book1, Book2, Book3</section>
  54. <ul>
  55. <li><a href="#/author">#/author</a></li>
  56. <li><a href="#/books">#/books</a></li>
  57. </ul>
  58. </body>
  59. </html>

Director支持commond的书写方式

例子如下:

  1. var director = require('director');
  2. var router = new director.cli.Router();
  3. router.on('create', function () {
  4. console.log('create something');
  5. });
  6. router.on(/destroy/, function () {
  7. console.log('destroy something');
  8. });
  9. // You will need to dispatch the cli arguments yourself
  10. router.dispatch('on', process.argv.slice(2).join(' '));

初始化及路由器的注册

  1. var router = Router(routes);

  另外,构造方法中传入的routes参数是一个路由对象,它是一个具有键值对结构的对象,可以被多层的嵌套。键对对应的URL中传入的路径,一般一个键值对应按照分割符切割后的某一部分;而键值对的值对应的该路径的需要触发的回调函数名。回调函数要在路由表对象使用前先声明,否则js会报错。 
  另外,回调函数除非特殊情况,一般不推荐使用匿名函数,请尽量先声明后使用。

  1.   var routes = {
  2. '/dog': bark,
  3. '/cat': [meow, scratch]
  4. };

这里的的url是#dog和#cat 
声明Router对象后,需要调用init()方法进行初始化,如:

  1. router.init();

路由的事件

路由事件是路由注册表中一个有固定命名的属性,是指当路由方法router.dispatch()被调用时,路由匹配成功的时定义的需要触发的回调方法(允许定义多个回调方法)。上文即时注册功能里的"on"方法就是一个事件。具体信息如下:  

on :当路由匹配成功后,需要执行的方法 
before:在触发“on”方法之前执行的方法 
  仅在客户端有效的方法:

after:当离开当前注册路径时,需要执行的方法 
once: 当前注册路径仅执行一次的方法

director.js实现前端路由的更多相关文章

  1. js 实现前端路由的方法

    js 实现前端路由的方法 前端路由原理 History API https://developer.mozilla.org/en-US/docs/Web/API/History_API https:/ ...

  2. director.js:客户端的路由---简明中文教程

    1.引子 最近学用director.js,那是相当的简单易学易使用.不过开始学的时候,搜搜过后,却没有发现相关的中文教程.于是决定硬啃E文,翻译备用的同时也当是给自己上课并加深对它的理解. direc ...

  3. JS高级学习笔记(9) 之 转:前端路由跳转基本原理

    原文链接: 前端路由跳转基本原理 前述 前端三大框架Angular.React和Vue都推行单页面应用SPA开发模式,这是因为在路由切换时,替换DOM Tree中发生修改的DOM部分,来减少原来因为多 ...

  4. 前端路由、后端路由——想要学好vue-router 或者 node.js 必须得明白的两个概念

    前端路由和后端路由的概念讲解 引言 正文 一.路由的概念 二.后端路由 三.前端路由 四.其他知识 结束语 引言 无论你是正在学习vue 还是在学习node, 你一定会碰到前端路由和后端路由这两个概念 ...

  5. 原生JS实现一个简单的前端路由(原理)

    说一下前端路由实现的简要原理,以 hash 形式(也可以使用 History API 来处理)为例, 当 url 的 hash 发生变化时,触发 hashchange 注册的回调,回调中去进行不同的操 ...

  6. 一个类似backbone路由的纯净route ( 前端路由 客户端路由 backbone路由 )

    大家用backbone.angular,可能都习惯了内置的路由,这两个框架的路由都是非常优秀的,强大而简单. 客户端(浏览器)路由原理其实比较简单,其实就是监听hash的变化. 在之前的架构探讨中,说 ...

  7. director.js教程

    directive.js 初始化和注册路由 director.js 的主要对象是Router对象,构造方法如下: var router = new Router(routes); //routes为路 ...

  8. 简单的基于hash和hashchange的前端路由

    hash定义 hash这个玩意是地址栏上#及后面部分,代表网页中的一个位置,#后面部分为位置标识符.页面打开后,会自动滚动到指定位置处. 位置标识符 ,一是使用锚点,比如<a name=&quo ...

  9. javascript基础修炼(6)——前端路由的基本原理

    [造轮子]是笔者学习和理解一些较复杂的代码结构时的常用方法,它很慢,但是效果却胜过你读十几篇相关的文章.为已知的API方法自行编写实现,遇到自己无法复现的部分再有针对性地去查资料,最后当你再去学习官方 ...

随机推荐

  1. 使用GnuPG(PGP)加密信息及数字签名教程_转

    所谓加解密就是一方以密钥加密,另一外收到文件后以相对应的密钥解密,从而获取原始文件.数字签名的过程:信息是通过普通未加密方式发送信息给对方的,只是在每条信息后面都会附加一坨字符(名曰:签名)(或信息与 ...

  2. X264学习1:简介

    H.264是视频编码标准. X264是它的开源实现,是视频编码器. 目录 [隐藏]  1 编码器特性 2 输入输出文件类型 2.1 输入 2.2 输出 3 preset和tune系统 3.1 --pr ...

  3. ViewPager系列之 仿魅族应用的广告BannerView(转)

    转载:http://www.open-open.com/lib/view/open1496585426285.html 使用方法:http://www.see-source.com/androidwi ...

  4. dynamic与var

    dynamic与var示例 var是一种语法省略写法,编译器会根据上下文推断出正确的类型. , , , , , , , }; foreach (var item in scores) { Consol ...

  5. 第三方-Swift2.0后Alamofire的使用方法

    第一部分,配置项目 首先我们创建一个工程如下图 在此只讲纯手打拉第三方框架的方法 然后把下载的Alamofire解压文件全部放进创建的项目文件夹中,如下图 关键时刻到了哦,集中精神,注意!!! 这个图 ...

  6. 识别不了socket未知的名称或服务

    个人博客地址:https://blog.sharedata.info/ socket 链接导致java.net.UnknownHostException: R1-T1-N6: R1-T1-N6: 未知 ...

  7. mybatis注解实现CURD

    我们来看下面这段代码: /** * The user Mapper interface. * * @author Wangzun * * @version 1.0 * * */ @CacheNames ...

  8. 鼠标画矩形openCV

    #include <cv.h> #include <highgui.h> #include <stdio.h> /*鼠标画矩形*/ void my_mouse_ca ...

  9. 我的Android进阶之旅------>如何将Activity变为半透明的对话框?

    我的Android进阶之旅------>如何将Activity变为半透明的对话框?可以从两个方面来考虑:对话框和半透明. 在定义Activity时指定Theme.Dialog主题就可以将Acti ...

  10. 正则表达式备忘(基于JavaScript)

    基于JS学习的正则表达式 备忘 e.g.匹配以0开头的三位或四位区号,以-分格的7或8位电话号码var reg1 = /^0\d{2,3}\-\d{7,8}$/;或var reg1 = new Reg ...