我在此模型关系中保存数据时遇到问题。我的模型如下:
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')
});
如您所见,我希望Flows有多个参数。我使用Flow和Parameter灯具进行了初步设置,它在模板中的行为与预期相同。但是,当我尝试在控制器中创建新的时,我无法正确设置流量和参数值。
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检查器中注意到的一件事是这些创建的元素的ID不是整数(它们就像字符串'fixture_0'),但我不确定为什么会这样,无论是相关的,还是如何解决它。
谢谢!
修改
在处理promises ala kingpin的解决方案之后,参数似乎是在我用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();
});
},
答案 0 :(得分:1)
params
async(这是在1.0最终命中之前被强化的东西,但它现在在1.0中看起来很挑剔测试版)。如果您正在使用夹具适配器,则应用fixture_ids。
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);
http://emberjs.jsbin.com/OxIDiVU/588/edit
另外,使用fixture适配器进行保存似乎会删除hasMany关系,因为它们是manyToOne连接(也就是两个记录彼此之间存在关系,其中一个是hasMany)。摆脱其中一个关系可以解决问题(或使用其中一个真正的适配器)