2017-01-05 5 views
0

私は頭痛の種です。私は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などを追加することはできない。

多くのお礼ありがとうございます

答えて

1

あなたのデバッグ設定とは?あなたのブラウザにEmberプラグインがありますか? 完全なデバッグ出力を投稿できますか? コードをステップ実行してエラーが発生した場所を確認しましたか? ブレークポイントを追加して、その時点でエラーが発生しているかどうかを確認できます。

`

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(ファイル)でエンバー - AJAXのようなものについては、エラーにどう反応するか

...

関連する問題