javascript - 使用 Ember.$.ajax() 发送具有关系的数据

标签 javascript jquery ruby-on-rails ember.js ember-data

我现在头疼。我正在使用 Ember 2.0(有点旧,我知道......!)。由于项目的性质(使用 ruby​​-on-rails),我们必须使用 Ember,$.ajax() 来管理数据,而不是 Ember-Data。我们试图发送一个与另一个数据模型有关系的数据对象,但它抛出一个:

未捕获类型错误:无法读取未定义的属性“选项”

Ember( Controller ):

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或类似的,同样是因为项目的结构。

非常感谢

最佳答案

您的调试设置是什么。您的浏览器中有 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(file) 中创建一条记录,响应错误...

关于javascript - 使用 Ember.$.ajax() 发送具有关系的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41488395/

相关文章:

jQuery animate() 使用 keydown 进行平滑

ruby-on-rails - S3 的 Assets 路径问题

javascript - 如何从 renderer.js 调用 react 组件代码?

javascript - 已删除的文件仍在被访问

javascript - 在验证器中添加自定义规则以检查 <ul> 是否有元素

javascript - jQuery slideDown 函数在动画结束时垂直跳转

javascript - 如何切换变量格式不一致的大小写

javascript - 如何仅从包含多个输入框的值的输入框获取值

ruby-on-rails - Ransack 计数排序顺序错误

javascript - rails : View javascript object's attributes in browser's console