Javascript 无法通过视图中的路由器调用其他页面
这是我目前的结构 main.jsJavascript 无法通过视图中的路由器调用其他页面,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
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()进行修补代码>但这不是一个解决方案。可能的错误是什么?我应该发布更新的代码吗?