kurko / ember-sync

MIT License
282 stars 28 forks source link

find records from server, relationship array not pushed to offline store #34

Open Leooo opened 9 years ago

Leooo commented 9 years ago

When using this.emberSync.find('post'), after fetching data from the server, the relationships are not pushed to the offline Store, only to the online Store: in ActiveModel serializer, extractArray pushes the relationships in the Store, while returning the primary Array. emberSync's find query uses the results returned by onlineSearch = this.onlineStore.find(type, query), which only returns the primary array.

To have the relationships pushed to the offlineStore, I had to override the ActiveModelSerializer:

export default DS.ActiveModelSerializer.extend({
 //(..)
  extractArray: function(store, primaryType, rawPayload) {
    //(..)
        if (isPrimary) {
          primaryArray = normalizedArray;
        } else {
          var records=this.container.lookup('store:main').pushMany(typeName, Ember.copy(normalizedArray,true));//added
          records.forEach(function(record){//added
            record.save();//added
          });//added
          store.pushMany(typeName, normalizedArray);
        }
      }
      return primaryArray;
    },

  extractSingle: function(store, primaryType, rawPayload, recordId) {
     //(..)
        if (isFirstCreatedRecord || isUpdatedRecord) {
          primaryRecord = hash;
        } else {
          var record=this.container.lookup('store:main').push(typeName, Ember.copy(hash,true));//added
          record.save();//added
          store.push(typeName, hash);
        }
      }, this);
    }
    return primaryRecord;
  },
kurko commented 9 years ago

Could you open a PR with this? This is very good.