Backbone:将服务器响应从一个模型设置为另一个模型

时间:2014-03-03 00:54:28

标签: backbone.js

登录后,用户被重定向到另一个页面。因此响应Login模型从服务器获取,它尝试设置为另一个模型 第二个模型从第一个模型中正确设置。但是当它到达另一个页面的视图时,它变为空 的模型

var LoginModel = Backbone.Model.extend({
    url:'http://localhost:3000/login',

    defaults: {
        email:"",
        password:""
    },
    parse: function(resp) {
        console.log('Model: Got the response back');
        return resp;
    },
    login: function() {
        console.log('Model: Login function:'+JSON.stringify(this));
        this.save(
            {}, {
                success: function(resp) {
                    console.log('success'+JSON.stringify(resp));
                    dashboardModel.set(resp.result);
                    window.location = 'templates/dashboard.html'
                },
                error: function(error) {
                    console.log('error: '+JSON.stringify(error));
                }
            });
    },
    redirect: function() {
        console.log('inside redirect method');
    }
});
var loginModel = new LoginModel();

var DashboardModel = Backbone.Model.extend({
    defaults: {
        campaignName:"",
        orderedAndGoal:"",
        status:"",
        endDate:"",
    },
    parse: function(resp) {
        console.log('Model: Got the response back');
        return resp;
    }
});
var dashboardModel = new DashboardModel();

查看

var DashboardView = Backbone.View.extend({
    template:_.template('<div>'+
                        '<h3><%= campaignName %></h3>'+
                        '<span><%= orderedAndGoal %>, </span>'+
                        '<span><%= status %>, </span>'+
                        '<span><%= endDate %>, </span>'+
                        '</div>'),
    initialize: function() {
        this.model.on('change', this.render, this); 
    },
    render: function() {
        console.log('what happens here')
        var attributes = this.model.toJSON();
        this.$el.html(this.template(attributes));
    },
});
var dashboardView = new DashboardView({model: dashboardModel});
dashboardView.render();
$(".container").append(dashboardView.el);

1 个答案:

答案 0 :(得分:0)

您正在使用window.location = ...导航到另一个HTML页面。那不行。当浏览器导航到另一个页面时,所有正在运行的代码及其设置的任何变量都会被吹走。 Backbone就是创建“单页面应用程序(SPA)”,其中浏览器只加载了1个页面,然后在运行时动态更改DOM。看一下Backbone.Router作为理解这一点的起点。您将调用此路由器上的方法将用户移动到另一个“视图”而不是触摸window.location

修复此问题,您的代码应该有效:)