3

私は Ember データ用の localStorage adaper をロールしており、検索機能を実行すると、次のようになります。

App.store.find(App.Person, 0 );

このエラーが発生しています:

Uncaught Error: assertion failed: A data hash was loaded for a model of type App.Person but no primary key 'undefined' was provided. 

より一般的なレベルでは、「永続層」(この場合は localStorage ) と Ember Store の関係について少し混乱しています。ストアに何かをロードするとはどういう意味ですか? DS.Person モデルのインスタンスがデータで作成されるということですか?

また、createRecord メソッドの 'App.store.didCreateRecord( model, data )' という行も機能していないため、コメント アウトしたことに注意してください。レコードが localStorage にロードされた後に store.didCreateRecord を呼び出さないとどうなりますか。

詳細:

DS.LocalStorageAdapter = DS.Adapter.extend({

    get: Ember.get,
    set: Ember.set,

    createRecord: function( store, modelType, model ){
        var records, index, data;
        // get existing records of this model
        records = this.localStorage.get( modelType );
        index = records.length;
        data = this.get( model, 'data' );
        // set storageID of data
        data.set( 'storageID', index );

        // add data to existing records
        records[index] = data;
            // encode records
        records = JSON.stringify( records );
            // store records in localStorage
        this.localStorage.set( modelType, records );
        // App.store.didCreateRecord( model, data );

    },



    find: function( store, modelType, id ) {
        var records, model;
        records = this.localStorage.get( modelType );
        model = records[id];
        App.store.load( modelType, model );
    },

    localStorage: {
        set: function( modelType, value ){
            localStorage.setItem( modelType, value);
        },

        get: function( modelType ){
          var record = localStorage.getItem(modelType);
          record = JSON.parse(record) || [];
          return record;
        }

    }
});



//application model
App.Person = DS.Model.extend({
    name: DS.attr('string', {key: 'css_name'}),
    storageID: DS.attr('number', {defaultValue: 0, key: 'storageID'}),

});

//create a couple of records
App.store.createRecord(App.Person, {  ... } );
App.store.createRecord(App.Person, {  ... } );

//try and find one record
App.store.find(App.Person, 0);

error thrown:
Uncaught Error: assertion failed: A data hash was loaded for a model of type App.Person but    no primary key 'undefined' was provided. ember-latest.js:51
Ember.assert ember-latest.js:51
(anonymous function) ember-latest.js:131
DS.Store.Ember.Object.extend.load ember-data.js:1530
DS.LocalStorageAdapter.DS.Adapter.extend.find bookApp_1.js:111
DS.Store.Ember.Object.extend.findByClientId ember-data.js:1174
DS.Store.Ember.Object.extend.find ember-data.js:1140
findRecord webApplication.js:210
onclick

また、これは少し前に投稿された別の質問に似ていることに注意してください: Ember Data: A data hash was loaded ... but no primary key 'undefined' was provided

そこの答えは、何が起こっているのかを実際には説明していないようです。

4

1 に答える 1

0

Ember 1.0 pre2 の Fixture データをロードする例を示すことができます

App.store = DS.Store.create({
  revision: 11,
  adapter: 'DS.FixtureAdapter'
});

App.User = DS.Model.extend({
  email: DS.attr('string'),
  password: DS.attr('string')
});

App.User.FIXTURES = [
  {
    "id": "1",
    "email": "test@mail.com",
    "password": "password"
  }
];

App.User.find(1).get('email')

私のために働きます。

于 2013-01-25T17:50:01.443 に答える