Ember.js 访问Ember中关系中的数据时出现问题

Ember.js 访问Ember中关系中的数据时出现问题,ember.js,model,attributes,ember-data,Ember.js,Model,Attributes,Ember Data,我在保存此模型关系中的数据时遇到问题。我的模型如下: App.Flow = DS.Model.extend({ title: DS.attr('string'), content: DS.attr('string'), isCustom: DS.attr('boolean'), params: DS.hasMany('parameter', {async: true}) }); App.Parameter = DS.Model.extend({ flow: DS.belon

我在保存此模型关系中的数据时遇到问题。我的模型如下:

App.Flow = DS.Model.extend({
  title: DS.attr('string'),
  content: DS.attr('string'),
  isCustom: DS.attr('boolean'),
  params: DS.hasMany('parameter', {async: true})
});

App.Parameter = DS.Model.extend({
  flow: DS.belongsTo('flow'),
  param: DS.attr('string'),
  param_tooltip: DS.attr('string'),
  param_value: DS.attr('string')
});
如您所见,我希望流具有多个参数。我有一个使用流和参数装置的基本设置,它们的行为与模板中预期的一样。但是,当我尝试在控制器中创建新的时,我无法正确设置流量和参数值

var p = this.store.createRecord('parameter', {
  param: "foo",
  param_tooltip: "world",
  param_value: "hello"
});

var f = this.store.createRecord('flow', {
  title: 'job',
  content: title,
  isCustom: true,
  params: [p] // doesn't seem to work
});

f.set('params', [p]); // doesn't seem to work
p.set('flow', f); // also doesn't seem to work

// Save the new model
p.save();
f.save();
我已经尝试了很多解决方案,在盯着这个和StackOverflow一段时间之后(不仅仅是列出的那些)。我真的不确定下一步该试什么。我在Ember inspector中注意到的一件事是,这些创建元素的ID不是整数(它们类似于字符串'fixture_0'),但我不确定这是为什么,它是否相关,或者如何修复它

谢谢

编辑

在处理完主销的解决方案后,当我检查print语句时,参数似乎是在createFlow函数中设置的;但是,我仍然无法访问模板和removeFlow函数中的参数

createJob: function() {
  // ...
  f.get('params').then(function(params) {
    params.pushObject(p);
  });

  f.get('params').then(function(params) {
    console.log(params.toArray()[0].get('param')); // prints 'foo'
  });
  // ...
},

removeJob: function(flow) {
  console.log(flow.get('title')); // prints 'job'
  flow.get('params').then(function(params) {
    var arr = params.toArray();
    console.log(arr); // prints '[]'
    for (var i=0; i < arr.length; i++) {
      console.log('hi'); // never gets printed
      arr[i].deleteRecord();
      arr[i].save();
    }
    flow.deleteRecord();
    flow.save();
  });
},
createJob:function(){
// ...
f、 get('params')。然后(函数(params){
参数pushObject(p);
});
f、 get('params')。然后(函数(params){
console.log(params.toArray()[0].get('param');//打印'foo'
});
// ...
},
removeJob:函数(流){
console.log(flow.get('title');//打印“作业”
flow.get('params')。然后(函数(params){
var arr=params.toArray();
console.log(arr);//打印'[]'
对于(变量i=0;i
params
异步需要等待,然后才能在其上设置属性或模型(这是在1.0最终生效之前经过强化的东西,但现在在1.0 beta版中很挑剔)。如果正在使用夹具适配器,则将应用夹具ID

var store = this.store;
var p = store.createRecord('parameter', {
   param: "foo",
   param_tooltip: "world",
   param_value: "hello"
  });

 var f = this.store.createRecord('flow', {
   title: 'job',
   content: 'title',
   isCustom: true,
 });

f.get('params').then(function(params){
  params.pushObject(p);

});

 p.set('flow', f);

另外,当两个记录是多人连接时,使用fixture适配器进行保存似乎会删除hasMany关系(也就是说,两个记录彼此都有关系,其中一个是hasMany)。摆脱其中一个关系可以解决问题(或者使用一个真正的适配器)


嗯,它仍然没有像我预期的那样工作。我试图访问控制器中removeFlow函数中的参数,以便在删除流之前删除参数。在摆弄并将params MutableArray转换为常规Javascript数组之后,我能够访问各个参数,至少在createJob方法中是这样。但是,它在deleteJob方法中似乎不起作用。我会更新主帖子。