我正在经历一个令人头痛的问题。我正在使用Ember 2.0(有点旧,我知道......!)。由于项目的性质(使用ruby-on-rails),我们必须使用Ember,$.ajax()
来管理数据而不是Ember-Data。我们正在尝试发送一个与另一个数据模型有关系的数据对象,但它会抛出:
Uncaught TypeError: Cannot read property 'options' of undefined
Ember(控制员):
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
或类似的,因为项目的结构如何。
非常感谢
答案 0 :(得分:1)
您的调试设置是什么?你的浏览器中有Ember插件吗? 你可以发布完整的调试输出吗? 您是否已逐步查看代码以查看错误发生的位置? 您可以添加断点以查看此时是否发生了错误。
像Ember-AJAX这样的东西
`
export default Ember.Controller.extend({
ajax: Ember.inject.service(),
actions: {
exportData() {
let ajax = this.get('ajax')
dataLink = this.get('model.dataLink');
if (this.get('isPdfChecked')) {
console.log('PDF is chosen!');
ajax.post(dataLink, {'files':{'pdf':'pdf', 'selected': true}})
.then(this.dostuff);
}
if (this.get('isHtmlChecked')) {
console.log('HTML is chosen!');
ajax.post(dataLink, {'files':{'html':'html', 'selected': true}})
.then(this.dostuff);
}
if (!this.get('isPdfChecked') && !this.get('isHtmlChecked')) {
console.log('No options chosen!');
}
`在dostuff(文件)中创建一条记录,回复错误......