Javascript 无法通过视图中的路由器调用其他页面

Javascript 无法通过视图中的路由器调用其他页面,javascript,backbone.js,requirejs,Javascript,Backbone.js,Requirejs,这是我目前的结构 main.js require.config({ paths: { jquery: 'libs/jquery/jquery-1.11.1.min', underscore: 'libs/underscore/underscore-min', backbone: 'libs/backbone/backbone-min', handlebars: 'libs/handlebars/handlebars-v1.3.0', template

这是我目前的结构

main.js

require.config({
  paths: {
    jquery: 'libs/jquery/jquery-1.11.1.min',
    underscore: 'libs/underscore/underscore-min',
    backbone: 'libs/backbone/backbone-min',
    handlebars: 'libs/handlebars/handlebars-v1.3.0',
    templates : '../templates/',

  }

});

require([
  'app',
], function(App){
  App.initialize();
});
app.js

define([
  'jquery',
  'underscore',
  'backbone',
  'router',
  'handlebars'
], function($, _, Backbone, Router, Handlebars){
  var initialize = function(){

    Router.initialize();
  }

  return {
    initialize: initialize
  };
});
路由器.js

define([
  'jquery',
  'underscore',
  'backbone',
  'handlebars',
  'views/login',
  'views/home'
], function ($, _, Backbone, Handlebars, LoginBox, HomePage) {
    var AppRouter = Backbone.Router.extend({
        routes: {
            'login': 'login',
            'home': 'home',
        },
        login: function () {
            var loginbox = new LoginBox();
            loginbox.render();
        },
        home: function () {
            var homepage = new HomePage();
            homepage.render();
        }
    });
    var initialize = function () {
        var app_router = new AppRouter;
        Backbone.history.start();
    };
    return {
        initialize: initialize
    };
});
login.js

define([
  'jquery',
  'underscore',
  'backbone',
  'handlebars',
  'text!templates/login.html',
  'router'
], function ($, _, Backbone, Handlebars, loginHTML, router) {

    var LoginBox = Backbone.View.extend({

        el: $('.middle-container'),
        initialize: function () {
            this.router = require('router');    // MagiC
            this.router.navigate('home');       // Lines
        },
        render: function () {
            var data = {};
            var compiledTemplate = _.template(loginHTML, data);
            this.$el.append(compiledTemplate);
        },
        events: {
            "click #submit": "login"
        },
        login: function (event) {

            var url = 'http://192.168.1.132:3000/api/login/';
            var formValues = {
                username: $('#username').val(),
                password: $('#password').val()
            };
            console.log("sending " + formValues);
            $.ajax({
                url: url,
                type: 'POST',
                //dataType:"json",
                data: formValues,
                success: function (data) {
                    console.log(["Login request details: ", data]);

                    /*I've been doing more magic here*/
                    //Router.initialize();
                    //Backbone.history.navigate("home", true);
                    //that.navigate("home", {});
                    //routerddd = new that();
                    //routerddd.navigate("home");


                    if (data.error) { 
                        alert("Errrorrroror : " + data.error);
                    } else { 
                        //More error
                    }
                }
            });
        }
    });
    return LoginBox;
});
好了,代码够了。如果ajax调用在
login.js
中成功,我一直在尝试将用户从
login
页面重定向到
home
页面。当ajax请求成功但无法将页面重定向到主页时,我将获得控制台日志。然而,我尝试了太多现在无法解释的事情。因此,当ajax请求成功时,如果在配置require js或以任何其他方式将用户导航到主页
(调用路由:home)
时出现任何错误。请引导我


谢谢。

在成功回调函数中使用下面的代码

Backbone.history.navigate("#/home");
它应该会起作用

但我猜您误解了主干网与服务器的通信方式。 应该使用Backbone.Model save()、fetch()、destroy()函数与服务器集成

您在requireJS中做得很好,只公开了您希望从模块中公开的内容,这是一个很好的模式

我只是认为可以使用模型而不是jqueryajax

请注意,主干网使用jquery的速度落后


希望能有帮助。

嘿,朋友,我试过了,但没用。事实上,我做了一些改变,现在我也可以呼叫路由器了。在这两种情况下,我都发现url正在改变,但页面没有改变!!!我正在通过
location.reload()进行修补但这不是一个解决方案。可能的错误是什么?我应该发布更新的代码吗?