Backbone js显示旧的模型

Backbone js displays old models

本文关键字:模型 显示 js Backbone      更新时间:2023-09-26

我是新的骨干,现在有骨干js和骨干验证的问题。下面是我的代码:

var EmployeeCreateView = Backbone.View.extend({
    el: "#page_content",
    initialize: function() {
        console.log("initializing....");
        this.model = new EmployeeModel();
        console.log(this.model);
        this.render();
    },
    render: function() {
        Backbone.Validation.bind(this);
        this.$el.html(EmployeeCreateTemplate);
    },
    events: {
        "click #submit-employee": "submitEmployee"
    },
    submitEmployee: function(e) {
        e.preventDefault();
        var data = Backbone.Syphon.serialize(this);
        this.model.set(data, { validate: true });
        console.log(this.model);
        if (!this.model.isValid()) {
            _.each(this.model.validationError, function (error) {
            });
        } else {
            this.model.save(null, {
                success: function() {
                    new EmployeeCollectionView();
                },
                error: function(model, response) {
                    this.$el.html(ErrorTemplate)({
                        error: response.responseText
                    });
                }
            });
        }
    }
});

发生的事情是,当我进入这个页面时,console.log()都显示一个模型,这很好。但是,当我离开页面并再次返回时,初始化中的console.log()显示了一个模型,这就是我想要的。但是,submitEmployee()函数上的console.log显示了两个模型。下面是控制台输出:

// first page load, shows a single object
initializing....
n {cid: "c2", attributes: Object, _changing: false, _previousAttributes: Object, changed: Object…}
// other page load
[n, n, n, n, n]
// back to original page, shows a new object
initializing....
n {cid: "c10", attributes: Object, _changing: false, _previousAttributes: Object, changed: Object…}
// submit still sees both objects, which i don't want 
n {cid: "c2", attributes: Object, _changing: false, _previousAttributes: Object, changed: Object…}
n {cid: "c10", attributes: Object, _changing: false, _previousAttributes: Object, changed: Object…}
谁能告诉我我做错了什么?

谢谢!

您有僵尸对象-应该被清理的对象,但由于引用而徘徊,并在稍后突然出现来咬您。

部分问题在于你管理视图的方式。让视图本身渲染是一个坏主意。让视图创建一个呈现自己的子视图来取代当前视图是一个更糟糕的想法。您看到的问题是这种代码结构的直接结果。

我推荐两篇文章作为开始:

在Backbone.js中管理页面过渡

在JavaScript中明确工作流