js replace url替换ip_Backbone.js教程四:Backbonejs中的Router实践

2bbdb074dc63b85a38e873ca8f8d5542.gif

阅读本文约需要5分钟

大家好,我是你们的导师,我每天都会大家分享一些干货内容(当然了,周末也要允许老师休息一下哈)。上次给大家分享了Backbone.js教程,今天继续分享Router实战。

上一章介绍了Model和Collection,基本上属于程序中静态的数据部分。这一节介绍Backbone中的router,属于动态的部分,见名知意,router——路由的意思,显然是能够控制url指向哪个函数的。具体是怎么做的一会通过几个实例来看看。

在现在的单页应用中,所有的操作、内容都在一个页面上呈现,这意味着浏览器的url始终要定位到当前页面。那么一个页面中的所有的操作总不能都通过事件监听来完成,尤其是对于需要切换页面的场景以及需要分享、收藏固定链接的情况。因此就有了router,通过hash的方式(即#page)来完成。不过随着浏览器发展,大多数的浏览器已经可以通过history api来操控url的改变,可以直接使用 /page 来完成之前需要hash来完成的操作,这种方式看起来更为直观一些。下面提供过几个demo来切实体会一番。

1 一个简单的例子

var AppRouter = Backbone.Router.extend({    routes: {        "*actions" : "defaultRoute"    },    defaultRoute : function(actions){        alert(actions);    }});var app_router = new AppRouter;Backbone.history.start();

需要通过调用Backbone.history.start()方法来初始化这个Router。在页面上需要有这样的a标签:

<a href="#actions">testActionsa>

点击该链接时,便会触发defaultRouter这个方法。

这个routes映射要怎么传参数

看下面例子,立马你就知道了

var AppRouter = Backbone.Router.extend({    routes: {        "posts/:id" : "getPost",        "*actions" : "defaultRoute"    },    getPost: function(id) {        alert(id);    },    defaultRoute : function(actions){        alert(actions);    }});var app_router = new AppRouter;Backbone.history.start();

对应的页面上应该有一个超链接:

<a href="#/posts/120">Post 120a>

从上面已经可以看到匹配#标签之后内容的方法,有两种:一种是用“:”来把#后面的对应的位置作为参数;还有一种是“*”,它可以匹配所有的url,下面再来演练一下。

var AppRouter = Backbone.Router.extend({    routes: {        "posts/:id" : "getPost",        //下面对应的链接为download gif        "download/*path": "downloadFile",        //下面对应的链接为Load Route/Action View        ":route/:action": "loadView",        "*actions" : "defaultRoute"    },    getPost: function(id) {        alert(id);    },    defaultRoute : function(actions){        alert(actions);    },    downloadFile: function( path ){        alert(path); // user/images/hey.gif    },    loadView: function( route, action ){        alert(route + "_" + action); // dashboard_graph    }});var app_router = new AppRouter;Backbone.history.start();
3 手动触发route

上面的例子都是通过页面点击触发router到对应的方法上,在实际的使用中,还存在一种场景就是需要在某一个逻辑中触发某一个事件,就像是jQuery中得trigger一样,下面的代码展示怎么手动触发router。

routes: {    "posts/:id" : "getPost",    "manual": "manual",    "*actions": "defaultRoute",},// 省略部分代码loadView: function( route, action ){    alert(route + "_" + action); // dashboard_graph},manual: function() {    alert("call manual");    app_router.navigate("/posts/" + 404, {trigger: true, replace: true});}

对应着在页面添加一个a标签: 

<a href="#/manual">manuala>

然后点击这个链接,便会触发posts/:id对应的方法。这里需要解释的是navigate后面的两个参数。trigger表示触发事件,如果为false,则只是url变化,并不会触发事件,replace表示url替换,而不是前进到这个url,意味着启用该参数,浏览器的history不会记录这个变动。

今天就分享这么多,关于Backbonejs中的Router实战,你学会了多少欢迎在留言区评论,对于有价值的留言,我们都会一一回复的。如果觉得文章对你有一丢丢帮助,请点右下角【在看】,让更多人看到该文章。

【我们直招】很苦逼,但工资超级高!   fb6b7adde4621f5e1671ac58a801a873.gif

3ce3725d6b519418078c8ebdc7b1ca19.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值