Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript BackboneJS未捕获引用错误:未定义变量_Javascript_Jquery_Backbone.js_Underscore.js - Fatal编程技术网

Javascript BackboneJS未捕获引用错误:未定义变量

Javascript BackboneJS未捕获引用错误:未定义变量,javascript,jquery,backbone.js,underscore.js,Javascript,Jquery,Backbone.js,Underscore.js,我是backbonejs新手,我能够添加和显示数据库中的联系人。但我无法使用backbonejs执行删除。JSFIDLE 当我尝试删除时,它会给我错误 "Uncaught ReferenceError: Id is not defined " 下面是stacktrace (匿名函数)VM103:2 InjectedScript._EvaluateonVM69:730 InjectedScript.\u evaluateAndWrap VM69:669 InjectedScript.evalua

我是backbonejs新手,我能够添加和显示数据库中的联系人。但我无法使用backbonejs执行删除。JSFIDLE 当我尝试删除时,它会给我错误

"Uncaught ReferenceError: Id is not defined "
下面是stacktrace (匿名函数)VM103:2 InjectedScript._EvaluateonVM69:730 InjectedScript.\u evaluateAndWrap VM69:669 InjectedScript.evaluate VM69:581

这是我的型号

var modelContact = Backbone.Model.extend({
    defaults: function () {
        return {
            Id: 0,
            Name: "",
            Address: ""
        };
    },
    idAttribute: "Id",
    url: function(){
        return 'api/Contact/' + this.get("Id");
    },
    initialize: function () {
        if (!this.get("Id")) {
            this.set({ "Id": this.defaults().Id });
        }
    },
    clear: function() {
        console.log(this.get("Id"));
        this.destroy({
            error: function(model, response) {
                alert("error");
            },
            success: function(model, response) {
                alert("success"); 
                console.log(response); 
            }
        });
    }
});
车型系列

var contactCollection = Backbone.Collection.extend({
    model: modelContact,
    url: function() {
        return 'api/Contact';
    }
});
var contacts = new contactCollection;
查看

var contactView = Backbone.View.extend({
    tagName: "tr",
    events: {
        "click a.destroy": "clear"
    },
    template: _.template($("#newContacttemplate").html()),
    initialize: function() {
        this.model.on("change", this.render, this);
        this.model.on('destroy', this.remove, this);
    },
    render: function () {
        if (this.isGoingToBeRemoved) {
            return (this);
        }
        this.$el.html(this.template(this.model.toJSON()));
        return this;
    },
    clear: function (e) {
       this.isGoingToBeRemoved = true;
       this.model.clear();
    }
});
所有错误都已解决这是工作代码

问题来自“渲染”

实际上,您正在设置一个值并删除模型:

    clears: function (e) {
        console.log(e);
        console.log(this.model);
        this.model.set({ // trigger change
            Id: 3
        });
        this.model.get("Id");
        this.model.clear(); // remove your model
    }
因为JS是异步的,所以您将同时调用“render”和“clear”。当您调用
this.el.html(this.template(this.model.toJSON())将已删除model.get('Id')。。因此,您将尝试调用不存在的东西

render: function () {
    // console.log(this.model.toJSON());
    this.$el.html(this.template(this.model.toJSON())); // this.model.toJSON() == {}
    return this;
},

“清除”模型时,必须阻止渲染方法。

您使用哪个版本的主干网?您正在覆盖主干网模型的
clear
。您能创建一个JSFIDLE并向我们展示如何创建您的模型吗?
defaults
的全部目的是使您不必执行初始化方法中的操作。你可以放下它altogether@Maroshii是的,我正在覆盖它,并对其进行销毁。好的,但是我不认为删除默认值可以解决这个问题。请检查clears函数中的这个fiddle,我已经删除了除此之外的所有代码。model.clear();//但是同样的错误:(好的,这个fiddle确实删除了这个错误,但是我的更改没有发布回服务器。现在我没有收到任何错误。但是更改没有发布到服务器。你的方法“clear”中有“this.destroy();”吗?是的,我在模型中有。之前没有清除:function(){this.destroy();}怀疑它不会进入服务器您是否使用成功和错误选项?()