javascript - 如何在 Backbone js中全局访问路由器?

标签 javascript backbone.js singlepage

这是我的 app.js 文件。我需要从 LandingView 类的 navigateToLogin 方法中访问路由器的 navigate 方法。但是由于 appRouter 是在 View 之后定义的,因此它无法从 View 中识别路由器。所以我需要找到一种从任何类或方法全局访问路由器的方法。我怎样才能解决这个问题?

var LandingView = Backbone.View.extend({
    tagName: 'div', 
    id: 'landing',
    className: 'landingpad',
    events: {
        'click button#login': 'navigateToLogin',
    },
    render: function (){

        (this.$el).append("<button class='button' id='login'>Login</button><br/><br/><br/>");
        (this.$el).append("<button class='button' id='new'>New User?</button>");

        console.log(this.el);
        return this;
    },
    navigateToLogin: function(e){
        app.navigate("/login", true);
        return false; 
    },
});

var appRouter = Backbone.Router.extend({

initialize: function(){
    $('#content').html(new LandingView().render().el);
}
});

    app = new appRouter();

最佳答案

如果你深入研究 Backbone 的代码,你会注意到路由器对 navigate 的实现依次调用 Backbone.history.navigate:

// Simple proxy to `Backbone.history` to save a fragment into the history.
navigate: function(fragment, options) {
  Backbone.history.navigate(fragment, options);
}

因此,不要显式地破坏全局范围,而是使用 Backbone.history.navigate:

var LandingView = Backbone.View.extend({
    ...
    navigateToLogin: function(e){
        Backbone.history.navigate("/login", true);
        return false; 
    },
});

关于javascript - 如何在 Backbone js中全局访问路由器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13953080/

相关文章:

javascript - 如果找到 Razor 处理程序,则调用 JS 函数

javascript - Telegram Bot 通过 node.js 发送照片

javascript - Backbone JS 点击事件处理程序不起作用

backbone.js - Backbone 模型中的集合

css - 单页 Wordpress 大小响应

javascript - 正则表达式忽略闭花括号和分号

javascript - 并非所有项目都可以使用 Scriptaculous、Sortables、scroll 和 overflow 进行排序

javascript - Backbone.js 查看被覆盖的变量

javascript - 单页网站,我想在刷新页面后的某个时间点得到

java - java后端单页应用打包部署