Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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 为什么模型ID不保留在集合中?_Javascript_Backbone.js - Fatal编程技术网

Javascript 为什么模型ID不保留在集合中?

Javascript 为什么模型ID不保留在集合中?,javascript,backbone.js,Javascript,Backbone.js,我将ID设置为我的模型,如下所示: var globalCounter = 0; var MyModel = Backbone.Model.extend({ initialize: function () { this.set('id', globalCounter); globalCounter += 1; } }); 现在,我将MyModel的一组实例添加到集合中: var i, model; MyCollection = Backbone.

我将ID设置为我的模型,如下所示:

var globalCounter = 0;
var MyModel = Backbone.Model.extend({
    initialize: function () {
        this.set('id', globalCounter);
        globalCounter += 1;
    }
});
现在,我将
MyModel
的一组实例添加到集合中:

var i, model;
MyCollection = Backbone.Collection.extend({});
myCollection = new MyCollection();

for(i = 0; i < 3; i += 1) {
    model = new MyModel();
    myCollection.add(model);
}

为什么我添加到集合中的模型的ID消失了?

您在定义MyModel的地方定义了globalCounter,但创建MyModel globalCounter实例的地方可能不在脚本的范围内

这就像是在前端实现的“自动增量”,您可以这样做,正如我写给您的那样,以防止范围问题(自动增量键将是“模型定义”的一部分,类似于某种静态变量):

这个代码对我有用<代码>/[0,1,2]
console.log(myCollection.pluck('id')); // gives [undefined, undefined, undefined]
var MyModel = Backbone.Model.extend({
    globalCounter : 0,
    initialize: function () {
        this.set('id', MyModel.prototype.globalCounter++);
    }
});