gpt4 book ai didi

backbone.js - 在路由之间保留数据而不去服务器?

转载 作者:行者123 更新时间:2023-12-04 18:46:02 28 4
gpt4 key购买 nike

我正在登录我的主干应用程序,遇到了一个问题,我不知道如何在不调用服务器的情况下解决。这在我的团队中引起了一场关于其他人如何处理这种事情的讨论,因为我们认为我们会遇到类似的事情。

今天是星期五,我可能只是脑死亡,但这里是......

我们有一个用户模型。 View 的登录方法创建一个新的用户模型并调用它的登录方法,传入用户凭据和回调函数,该函数具有一个包含用户信息的对象。

这是我们 View 的登录方法:

login: function(event){
event.preventDefault();

var user = new App.User;
user.login($('#username').val(), $('#password').val(),
(function(msg) {
// success callback
if (msg.loggedIn) {
console.log("Authenticate successful: " + JSON.stringify(msg));
var data = { user : msg, bob : "bob", trigger:true };
console.log("Prepared data: " + JSON.stringify(data));
App.router.navigate('home',data);
} else {
console.log("Authenticate unsuccessful: " + JSON.stringify(msg));
}
}).bind(this),
function(msg) {
// failure callback
console.log("Authenticate communication failure: " + JSON.stringify(msg));
alert("Communication fail!");
App.router.navigate('login',{trigger:true});
});
}

我们试图弄清楚如何最好地使此模型数据可用于另一条路线(家),以便我们可以在 View 中使用它。

所以我有这个路由器:
routes: {
'': 'home',
'home': 'home',
'login': 'login'
},
home: function(data){
console.log(data);
}

一旦我们登录了用户,我们需要更新路由并访问该用户数据,但不想必须返回服务器来获取它。

我很担心,因为我们正在构建一种“向导”,用户可能需要在其中向前和向后移动一些步骤,而且我不想每次浏览应用程序时都必须访问服务器,但看起来像我们要么需要将内容保存到全局变量(不想这样做),要么每次都返回服务器。我相信其他人也不得不处理类似的问题。只是寻找一些见解。

谢谢!

最佳答案

"it's seeming like we are going to either need to save stuff to a global variable (don't want to do this)"



声明一下:您将需要保留状态。您的选择是将状态传输到服务器并返回,或者在客户端上保持状态。由于您已经确定不想通过服务器传递状态,因此您只能在客户端的不同页面(路由)之间保留状态。

这就是全局变量的用途。我知道这听起来很恶心,但这也是单页应用程序带来的主要好处之一。状态。并且该状态将始终由某个全局对象持有。

管理状态的方式有好有坏。有一个名为 data 的全局变量你不断分配和重新分配显然是最糟糕的方式。您应该找出对您的要求有意义的模式。

如果我正确理解了您的代码示例,那么您要存储的是有关当前用户的信息。似乎您已经有了一个全局变量 App .我突然想到保留某种 session 是个好主意。信息:
login: function(data){
doLogin({
success: function(userData) {
App.session.currentUser = userData;
App.router.navigate('home', { trigger:true });
}
});
},

home: function(data){
if(!App.session || !App.session.currentUser) {
App.router.navigate('login', { trigger:true });
return;
}

var user = App.session.currentUser;
//do something with user
}

国家不一定是邪恶的。糟糕的是整个应用程序都依赖于全局状态,这很容易导致无法测试的意大利面条式代码。但是,如果您在链中将状态依赖解析为“高处”(例如在路由器中),并使用构造函数和方法参数向下传递值,您仍然可以在其余部分保持可测试性和无副作用代码库。

抱歉,我没有给你的 Elixir 。有一些图书馆, Backbone.StateManager其中,可以帮助管理状态、转换等,但本质上它们不会做任何你不能为自己做的事情。

关于backbone.js - 在路由之间保留数据而不去服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14164406/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com