Javascript 创建模型时的主干无限循环

Javascript 创建模型时的主干无限循环,javascript,backbone.js,infinite-loop,Javascript,Backbone.js,Infinite Loop,我想我正在做一些相当标准的事情 型号: app.model.Todo = Backbone.Model.extend({ defaults: { task: '' , completed: 0 , attachments: [] , note: '' } }); 收藏: var Todos = Backbone.Collection.extend({ model: app.model.Todo

我想我正在做一些相当标准的事情

型号:


app.model.Todo = Backbone.Model.extend({
    defaults: {
        task: ''
        , completed: 0
        , attachments: []
        , note: ''
    }
});
收藏:


var Todos = Backbone.Collection.extend({
    model: app.model.Todo

    , localStorage: new Store('Todos')

    , incomplete: function () {
        return this.filter(function (todo) {
            return !todo.get('completed')
        });
    }

    , complete: function () {
        return this.filter(function (todo) {
            return todo.get('completed')
        });
    }

    , comparator: function(todo) {
        return todo.get('order');
    }
});

app.collection.Todos = new Todos();
那么,如果我这样做:

app.collection.Todos.create({task: 'hi'});
app.collection.Todos.create({task: 'hi'});
第二个永远不起作用。我得到一个无限循环(Firefox上的递归太多,Chrome上的堆栈溢出)

我真是不知所措。我也评论了所有事件

在主干中,它似乎失去了控制:

// Return a copy of the model's `attributes` object.
toJSON: function(options) {
    return _.clone(this.attributes);
}, 
更新:如果我向模型中添加
id:0
或任何id,错误就会停止,但如果我给它一个自定义id(即
new Date().getTime()
),错误会再次发生。就像每次我创建一个唯一的项时,它就会爆炸一样

更新2:

var todo = new gator.model.Todo({task: actionbarVal});
gator.collection.Todos.add(todo);
gator.collection.Todos.sync('create', todo);

做上面的工作很有效,我需要它来做的事情也很有效,但这真的很糟糕。这很糟糕,因为每次我们做一个新的添加和同步,每次在这个页面加载中调用添加和同步,它都会调用一次JSON。所以,如果你添加3个项目,你会得到6个toJSON调用(第一个1,第二个2,第三个3)。而且,它也不那么干净。我还注意到在主干中调用的
toJSON
中,这个.attributes与create第一次是正确的。第二次是这样的。attributes==主干或其他什么。非常非常奇怪。它有主干的所有方法。就好像克隆做了深度克隆或其他什么。

你有一个mism主干网版本之间的atch(v0.9.9)以及localstorage附加组件的版本。请确保从主干网repo获取最新版本的localstorage附加组件,它将解决此问题。

多亏了德里克·贝利,我最终通过恢复到主干网的0.9.2版本来解决了此问题。我尝试使用最新的localstorage附加组件似乎无法解决此问题。也许我使用的是di不同的来源?我用的是:


我恐怕在中找不到模型的
create
,它只用于集合。如果在集合上调用create,似乎可以正常工作:PS:如果您有数组(或其他可变对象)在您的
默认值中
那么您应该使用默认值函数,而不是对象。@Cyclone damn,我的错。这是一种类型。我指的是集合。已修复。@OscarGodson为了将来的SO清洁度,请您粘贴解决方案作为对此的答案,这样它看起来就不会没有得到回答/解决。@muistooshort I dunno:(我已经删除了几乎所有的代码,现在仍在运行。我去掉了默认值。我的收藏只是建立了一个模型,localStorage,然后
app.collections.Todos=new Todos()
和“app.js”只有app=
{model:{},collection:{},view:{}
window app.app=app