Javascript 余烬数据关系中的无限循环?

Javascript 余烬数据关系中的无限循环?,javascript,ember.js,ember-data,Javascript,Ember.js,Ember Data,查询: 有人能告诉我为什么我在试图删除一个余烬数据模型时会得到一个无限循环吗。在崩溃过程中,问题似乎出现在clearRelationships中,但无论我尝试建立模型关系的程度有多小,我似乎都无法摆脱无限循环,而无法同时避免它们 相关代码: //// Config App = Ember.Application.create(); App.Adapter = DS.RESTAdapter.extend(); App.store = DS.Store.create({ revision: 1

查询:
有人能告诉我为什么我在试图删除一个余烬数据模型时会得到一个无限循环吗。在崩溃过程中,问题似乎出现在clearRelationships中,但无论我尝试建立模型关系的程度有多小,我似乎都无法摆脱无限循环,而无法同时避免它们


相关代码:

//// Config
App = Ember.Application.create();
App.Adapter = DS.RESTAdapter.extend();
App.store = DS.Store.create({
  revision: 11,
  adapter: App.Adapter.create()
});
App.Router = Ember.Router.extend({});
App.Router.map(function() {
  this.resource('main', { path: '/' });
});

//// Models
App.Scientist = DS.Model.extend({
  name:     DS.attr('string'),
  tests:    DS.hasMany('App.Tests'),
  criteria: DS.belongsTo('App.Criteria')
});
App.Test = DS.Model.extend({
  name:      DS.attr('string'),
  scientist: DS.belongsTo('App.Scientist'),
  criteria:  DS.belongsTo('App.Criteria')
});
App.Criteria = DS.Model.extend({
  name:      DS.attr('string'),
  scientist: DS.belongsTo('App.Scientist'),
  test:      DS.belongsTo('App.Test'),
  resources: DS.hasMany('App.Resource')
});
App.Resource = DS.Model.extend({
  name:     DS.attr('string'),
  criteria: DS.belongsTo('App.Criteria')
});

//// Pre-Load Models
App.store.loadMany(App.Test,
  [{id:'1', scientist_id:'1', name:'gravity', criteria_id:'2'},
   {id:'2', scientist_id:'1', name:'not gravity', criteria_id:'3'}]);
App.store.load(App.Scientist, 
  {id:'1', name:'Bill', tests:['1', '2'], criteria_id:'1'});
App.store.load(App.Criteria, 
  {id:'1', name:'control', scientist_id:'1', test_id:null, resources:['1']});
App.store.loadMany(App.Criteria,
  [{id:'2', name:'variation1', scientist_id:null, test_id:'1', resources:['2','3']},
   {id:'3', name:'variation2', scientist_id:null, test_id:'2', resources:['4','5']}]);
App.store.loadMany(App.Resource, 
  [{id:'1', name:'resource1', criteria_id:'1'},
   {id:'2', name:'resource2', criteria_id:'2'},
   {id:'3', name:'resource3', criteria_id:'2'},
   {id:'4', name:'resource4', criteria_id:'3'},
   {id:'5', name:'resource5', criteria_id:'3'}]);

var filter = App.Test.filter(
  function(model) { if (model.get('isLoaded') === true) { return model; } }
);

App.MainRoute = Ember.Route.extend({
  setupController: function(controller, model) {
    controller.set('tests', filter);
  }
});

///// Controller
App.MainController = Ember.ArrayController.extend({
  name: 'Main',
  createTest: function() {
    App.Test.createRecord();
    App.store.commit();
  },
  removeTest: function(test) {
    test.deleteRecord();
    App.store.commit();
  }
});

复制步骤:

1) 打开浏览器控制台。
2) 拉小提琴。
3) 在按下列表项之一的“删除”按钮时,观察console


更新1(2013年1月27日下午8:44)
附加上下文:这是使用ember-1.0.0-pre.4.js&截至2013年1月27日在master上提交的最新ember数据。我还在上面的示例代码中添加了更多内容


更新2(2013年1月2日下午5:25)
碰撞问题仍然存在,github问题跟踪器上最近似乎有不少涉及deleteRecord的问题,听起来与我的问题类似。这里有一个链接,指向我在跟踪器上的具体问题:

我也遇到了类似的问题。我有这样的模型

App.User = DS.Model.extend({
  account: DS.belongsTo('App.Account'),
  name: DS.attr('string')

});

App.Account = DS.Model.extend({
  user: DS.belongsTo('App.User'),
  type: DS.attr('string')
});
递归实际上并不发生在clearRelationships中,而是在ember.js set方法的这一部分中

var meta = obj[META_KEY], desc = meta && meta.descs[keyName],
      isUnknown, currentValue;
  if (desc) {
    desc.set(obj, keyName, value);
  } else {
   ....
  }
当我删除该用户时,它试图清除调用
set的关系(这个“account”,null)
,最终到达上面的部分,该部分一次又一次地调用set

我不确定解决这个问题的正确方法,但在我的情况下,我通过删除帐户上的用户belongsTo关系使它起到了作用。我的新模型是这样的

App.User = DS.Model.extend({
  account: DS.belongsTo('App.Account'),
  name: DS.attr('string')

});

App.Account = DS.Model.extend({
  // user: DS.belongsTo('App.User'),
  type: DS.attr('string')
});

我也有类似的问题。我有这样的模型

App.User = DS.Model.extend({
  account: DS.belongsTo('App.Account'),
  name: DS.attr('string')

});

App.Account = DS.Model.extend({
  user: DS.belongsTo('App.User'),
  type: DS.attr('string')
});
递归实际上并不发生在clearRelationships中,而是在ember.js set方法的这一部分中

var meta = obj[META_KEY], desc = meta && meta.descs[keyName],
      isUnknown, currentValue;
  if (desc) {
    desc.set(obj, keyName, value);
  } else {
   ....
  }
当我删除该用户时,它试图清除调用
set的关系(这个“account”,null)
,最终到达上面的部分,该部分一次又一次地调用set

我不确定解决这个问题的正确方法,但在我的情况下,我通过删除帐户上的用户belongsTo关系使它起到了作用。我的新模型是这样的

App.User = DS.Model.extend({
  account: DS.belongsTo('App.Account'),
  name: DS.attr('string')

});

App.Account = DS.Model.extend({
  // user: DS.belongsTo('App.User'),
  type: DS.attr('string')
});

这是一只虫子。Github上的拉取请求为我修复了它

这是一个错误。Github上的拉取请求为我修复了它

再想一想,这显然不是一个解决方案,因为如果帐户上没有用户,您将无法访问相关信息。再想一想,这显然不是一个解决方案,因为如果帐户上没有用户,您将无法访问相关信息