具有持久数据的骨干持久视图

时间:2014-11-21 09:30:44

标签: javascript backbone.js backbone-views

我有一个导航栏,它几乎是我的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;

为什么?

===编辑我附加了创建主导航的方法,它是在路由初始化时完成的。执行视图更新的方法是前面的代码,登录设置导航视图中的模型,监听更改===

0 个答案:

没有答案