backbone.js – 以编程方式向Backbone.Router添加路由?

前端之家收集整理的这篇文章主要介绍了backbone.js – 以编程方式向Backbone.Router添加路由?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这是我的application-router.js文件,我正在创建只有少数路由的Backbone.Router对象:
var App = App || {};

App.Router =  Backbone.Router.extend({
    routes : {
        ''      : 'showDashboard',// Not shown
        '*other': 'showModalError'
    },defaultRoute : function(other) { $('#modal404').modal(); }
});

在主要的javascript文件application.js中,我想以编程方式添加路由.我试过route()功能,它不工作,路由不添加.然而,它将一个对象传递给“构造函数”,但这将覆盖已经定义的路由:

// This works and overrides all defined routes in App.Router
var router = new App.Router({ routes : { '/test/me' : 'testRoute' } });

// This is not working
router.route(ExposeTranslation.get('customers.new.route'),'newCustomer');
router.route('/test/me/again','testAgainRoute');

实际上console.log(App.Router)显示

routes Object { /test/me="testRoute"}

我想我缺少一些我无法想象的东西,我开始学习这个强大的javascript的小块子.

解决方法

你的router.route调用正在工作,这些调用不是你的问题.当您拨打 route添加新路由时,新路由将在路由列表的末尾.特别地,您的路由呼叫添加的路由在“* other”和“* other”之后将匹配任何内容,以便您的新路由将被有效地忽略.

尝试从路由中删除您的“*其他”路由,并在您的两条路由()调用添加

routes : {
    ''      : 'showDashboard' // Not shown
},router.route(ExposeTranslation.get('customers.new.route'),'testAgainRoute');
router.route('*other','showModalError');

路线未存储在App.Router对象they’re stored inside Backbone.history中:

route: function(route,name,callback) {
  // ...
  Backbone.history.route(route,_.bind(function(fragment) {
    //...
  },this));
  return this;
},

这就是为什么你的console.log(App.Router)没有任何帮助.

猜你在找的JavaScript相关文章