【发布时间】:2014-06-04 02:33:50
【问题描述】:
我无法在此模型关系中保存数据。我的模型如下:
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')
});
如您所见,我希望流具有多个参数。我有一个使用 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 的解决方案后,当我检查打印语句时,该参数似乎是在我拥有的 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();
});
},
【问题讨论】:
标签: ember.js model attributes ember-data