两个Backbone.Router定义之间的区别

时间:2012-05-14 13:56:52

标签: javascript backbone.js

我尝试使用backbone.js创建我的第一个javascript应用程序 而且我发现了奇怪的行为,不明白2段代码之间的区别 一个效果很好,第二个似乎不起作用。

在主页上显示提醒和'#test'URl

var AppRouter = Backbone.Router.extend({
    routes:{
        "": 'index',
       "test": 'test'
    },
    index: function(){
        alert('index');
    },
    test: function(){
        alert('test');
    }    
});
var app = new AppRouter();
Backbone.history.start();

这不起作用,但Backbone.history.hanlers看起来相同

var router = new Backbone.Router({
    routes:{
        "": 'index',
       "test": 'test'
    },
    index: function(){
         alert('index');
    },
    test: function(){
         alert('test');
    }    
});
Backbone.history.start();

1 个答案:

答案 0 :(得分:3)

两位代码之间的区别在于,在第一个代码中,您创建了一个名为AppRouter的新类,而在第二个代码中,您只是创建了一个普通的Backbone.Router类。

我可能会误解,但似乎你说的是第一个例子有效,而第二个例子没有?

第二个例子不起作用的原因是因为Backbone.Router只接受routes哈希作为它的构造函数的参数。您传递的indextest函数不会作为对象上的函数创建。

如果要将routes哈希传递给构造函数,则仍需要使用实际路由函数扩展Backbone.Router。例如:

var AppRouter = Backbone.Router.extend({
    index: function(){
        alert('index');
    },
    test: function(){
        alert('test');
    }    
});
var app = new AppRouter({ 
    routes:{
        "": 'index',
       "test": 'test'
    }});
Backbone.history.start();