3

私の RESTAdapter 設定:

App.ApplicationAdapter = DS.RESTAdapter.extend
  namespace: '/api'

私のモデル:

module.exports = App.Cat = DS.Model.extend
  name: DS.attr 'string'
  description: DS.attr 'string'
  picture: DS.attr 'string'
  location: DS.attr 'string'
  profileStyle: DS.attr 'string'
  created: DS.attr 'date'

私のルート:

Cat = require '../../models/cat'

App.CatNewRoute = Em.Route.extend
  model: ->
    @store.createRecord(Cat, {
      created: new Date()
    })

私のコントローラー:

App.CatNewController = Em.ObjectController.extend
  actions:
    addCat: ->
      console.log 'saving...'
      @get('model').save().then ->
        console.log 'all done'

Ember インスペクターを使用して、保存時にテンプレートのフォームから割り当てられるすべての属性がモデルにあることを確認しました (null の id を除く - これは正常であり、Ember はデフォルトで ID を使用します)。サーバーによってモデルに割り当てられます)。モデルを保存するたびに、エラーが発生します。

Uncaught TypeError: Cannot read property 'typeKey' of undefined 

このエラーは、ember データ ソース コードの次の場所で発生します。

if (container) {
  adapter = container.lookup('adapter:' + type.typeKey) || container.lookup('adapter:application');
} 

Ember-data 1.0.0 beta 3-2 と Ember 1.0.0-4 を使用しています。同じ効果を得るために、いくつかの異なるバージョンの Ember データを試しました。

jsBin の近似: http://jsbin.com/ixIqIjI/6/edit?html,js,console,output

この jsBin も typeKey エラーでエラーになります。

4

3 に答える 3

4

解決策を見つけました。と引数を取りますが、 のcreateRecordような明示的なモデル名にすることはできません。文字列でなければなりません。Ember は、名前に基づいて正しいモデルにアタッチします。この場合、レコードを作成する正しい方法は次のとおりです。typerecordtypeApp.Catthis.store.createRecord('cat', {...} )

于 2013-10-04T20:48:09.123 に答える
0

JSBin が機能するように更新しました。モデルの文字列バージョンを渡す必要があるため、App.Cat の場合、App.BigPost などの場合は「cat」を渡します。「bigPost」を渡すと、文字列がモデルに解決され、ember-data アダプターが何をすべきかを知っています。

作業バージョン - http://jsbin.com/ixIqIjI/10/edit

于 2013-10-31T01:32:51.073 に答える