我有一个导航栏,它几乎是我的Web应用程序中唯一的持久性模板(无论路径如何,总是存在)。
在该导航栏中,如果用户未登录,我会显示一个登录链接,如果他们是我显示他们的名字,我遇到的问题是我无法通过导航来保持它的状态。州。使用登录,
runLogin: function(e) {
e.preventDefault();
var element = $(e.currentTarget),
self = this;
$.when($.ajax({
url: 'http://app-api.dev/api/oauth/access_token?grant_type=password&client_id=1&client_secret=xyz',
method: 'POST',
data: element.serialize(),
dataType: 'json',
success: function(data) {
// Set the cookie, this will need to be sent in every singal request going foward.
$.cookie('access_token', data.access_token);
// So we have the access token we use this to populate our user details
},
error: function(response) {
// We can build a universal error view that would be quite and pretty easy to do.
}
})).done(function() {
$.ajax({
url: 'http://app-api.dev/api/users/me',
dataType: 'json',
method: 'GET',
success:function(user) {
self.model.set(user);
self.launchDashboard();
}
});
})
},
launchDashboard: function() {
localStorage.setItem('user', '');
localStorage.setItem('user', JSON.stringify(this.me));
App.Routes.Application.navigate('dashboard', { trigger: true } );
}
基本上我登录,从API请求我的详细信息,并使用它们来设置模型,我设置的模型已经传递到导航视图,并且有一个更改侦听器。
showUserDetails: function() {
this.loggedInUserMenu = new App.Views.navigationViewLoggedIn({
model : this.model
});
},
以上解雇了这个,
App.Views.navigationViewLoggedIn = Backbone.View.extend({
el: '.navbar-right',
template: _.template( $('#tpl-navigation-logged-in').html() ),
events: {
},
initialize: function() {
this.render();
},
render: function() {
this.$('.li-login').replaceWith( this.template({
user: this.model.toJSON()
}));
}
});
路由器
initialize: function() {
Pops.Models.AuthUser = new Pops.Models.User;
this.navigation_bar = new Pops.Views.navigationView({
model: Pops.Models.AuthUser
});
},
成功登录后,loggedInNavigation是可见的,我在app-client.dev/#dashboard
但是如果我导航到`app-client.dev/#groups我丢失了loggedInNavigation,它又回到了说" login& #34;
为什么?
===编辑我附加了创建主导航的方法,它是在路由初始化时完成的。执行视图更新的方法是前面的代码,登录设置导航视图中的模型,监听更改===