0

Ember Data では、モデルを宣言してストアにコミットした後、それを取得して特定のフィールドに新しい値を設定しようとしましたが、次のエラーが発生しました。

Uncaught Error: <DS.StateManager:ember227> could not respond to event setProperty in state rootState.loaded.created.inFlight.
Ember.StateManager.Ember.State.extend.sendRecursively ember-latest.min.js:17
Ember.StateManager.Ember.State.extend.sendRecursively ember-latest.min.js:17
Ember.StateManager.Ember.State.extend.sendRecursively ember-latest.min.js:17
Ember.StateManager.Ember.State.extend.sendRecursively ember-latest.min.js:17
Ember.StateManager.Ember.State.extend.sendRecursively ember-latest.min.js:17
Ember.StateManager.Ember.State.extend.send ember-latest.min.js:17
DS.Model.Ember.Object.extend.send ember-data.js:2540
DS.Model.Ember.Object.extend.setProperty ember-data.js:2549
(anonymous function) ember-data.js:2682
n.set ember-latest.min.js:14
c ember-latest.min.js:14
Ember.Observable.Ember.Mixin.create.set ember-latest.min.js:15
(anonymous function)

詳細 (主に定型コード):

/* create store */
 App.store = DS.Store.create({
    revision: 2,
    // adapter: DS.LocalStorageAdaptor.create({}),
    adapter: DS.DjangoTastypieAdapter.create({
      serverDomain:  "http://localhost:8000",
      tastypieApiUrl: 'api/v1/',
    });
});

// declare model
App.StyleData = DS.Model.extend({
    ...
    storageID: DS.attr('number', {defaultValue: 0, key: 'storageID'}),

    didCreate: function(){
        // console.log('didcreate');
    },

});

/*create new model */

App.store.createRecord(App.StyleData, {storageID: 0});
App.store.commit();

/* retrieve model and set new value for storageID */
var mod = App.store.findAll( App.StyleData );
var mod1  = mod.get('modelCache')[0];
mod1.set('storageID', 10)     // here the error above is thrown 
4

2 に答える 2

3

このエラーは、API呼び出しを介して保存されている間にレコードを変更しようとしたことが原因で発生します。この例でApp.store.commit()は、ajax操作を開始して、新しいレコードの詳細をAPIに送信します。Ajax呼び出しは非同期操作であるため、APIが応答するまでレコードは状態になり、すべてが成功した場合inFlightはember-dataがレコードを元に戻します。cleanですがinFlight、変更することはできません。

于 2012-09-15T12:20:32.057 に答える
2

この方法を試してください:

var update = function(){
  if(mod.isLoaded()){
    mod1.set('storageID', 10);
  }
}.observes('mod.isLoaded')
于 2012-09-15T12:22:46.860 に答える