私は頭痛の種です。私はEmber 2.0を使用しています(ちょっと古いですが...!)。プロジェクトの性質(ルビー・オン・レールを使用)のために、Ember-Dataの代わりにEmber,$.ajax()
を使用してデータを管理する必要があります。私たちは、別のデータモデルと関係を持っているデータ・オブジェクトを送信しようとしているが、それは投げる:
Uncaught TypeError: Cannot read property 'options' of undefined
エンバー(コントローラ):
import Ember from 'ember';
export default Ember.Controller.extend({
sendFileData(url, verb, filetype, isSelected) {
let controller = this;
Ember.run.next(this,() => {
Ember.$.ajax({
url: url,
type: verb,
data: {
title: controller.get('model.title'),
files: Ember.A([
controller.store.createRecord('file', {
selected: isSelected,
pdf: (filetype === 'pdf') ? 'pdf' : null,
html: (filetype === 'html') ? 'html' : null
})
])
}
}).then(() => {
controller.set('successMessage', 'Pdf Data sent to backend!');
},() => {
controller.set('successMessage', 'Something is wrong with PDF data!');
});
console.log('end sendFileData()!');
});
},
actions: {
exportData() {
let controller = this,
dataLink = controller.get('model.dataLink');
console.log('Data link: ', dataLink);
console.log('Model title: ', controller.get('model.title'));
if (controller.get('isPdfChecked')) {
console.log('PDF is chosen!');
controller.sendFileData(dataLink, 'POST', 'pdf', controller.get('isPdfChecked'));
}
if (controller.get('isHtmlChecked')) {
console.log('HTML is chosen!');
controller.sendFileData(dataLink, 'POST', 'html', controller.get('isHtmlChecked'));
}
if (!controller.get('isPdfChecked') && !controller.get('isHtmlChecked')) {
console.log('No options chosen!');
}
}
}
});
モデル:
// document model
import DS from 'ember-data';
export default DS.Model.extend({
title: DS.attr('string'),
content: DS.attr('string'),
created_at: DS.attr('date'),
start_at: DS.attr('utc'),
end_at: DS.attr('utc'),
user: DS.belongsTo('user', { async: true }),
versions: DS.hasMany('version', { async: true }),
files: DS.hasMany('file', { async: true }), // here's the relationship to file model
dataLink: Ember.computed('id', function() {
return "/export/data/document/" + (this.get('id'));
})
});
// file model
import Ember from 'ember';
import DS from 'ember-data';
export default DS.Model.extend({
name: DS.attr('string'),
url: DS.attr('string'),
created_at: DS.attr('date'),
document: DS.belongsTo('document', { async: true }), // here's the relationship to document model
filetype: DS.attr('string'),
selected: DS.attr('boolean'),
pdf: DS.attr('boolean'),
html: DS.attr('boolean')
});
これ以上何をすべきかわからない:(...そして、プロジェクトの構造上の理由から、ember-data-save-relationships
などを追加することはできない。
多くのお礼ありがとうございます