mardi 29 mars 2016

Duplicate records showing up in template

I have a survey app built with Ember JS and a Firebase backend with Emberfire adapter.

Here are the relevant portions of my user model:

//app/models/user.js
export default DS.Model.extend({
  name: DS.attr(),
  sessionuid: DS.attr(),
  surveysToTake: DS.hasMany('survey', { async: true, inverse: 'respondents' }),
  surveysCreated: DS.hasMany('survey', { async: true, inverse: 'creator' }), 
  responseSetsSubmitted: DS.hasMany('response-set', {async: true, inverse: 'respondentid'}),
  respSetSurveyLookup: DS.attr({defaultValue: function() { return []; }}) 
});

And my responseSet (which is a collection of responses from a user)

//app/models/response-set.js
export default DS.Model.extend({
  responses: DS.hasMany('response', { async: true, inverse: 'responseSet' }),
  survey: DS.belongsTo('survey', { async: true, inverse: 'responseSets' }),
  respondentid: DS.belongsTo('user', {async: true, inverse: 'responseSetsSubmitted'}),
});

And the survey model looks like this:

//app/models/survey.js
export default DS.Model.extend({
  title: DS.attr(),
  questions: DS.hasMany('question', { async: true, inverse: 'survey' }),
  respondents: DS.hasMany('user', { async: true, inverse: 'surveysToTake'}),
  responseSets: DS.hasMany('response-set', { async: true, inverse: 'survey' })
});

Now, when creating a user we do something like this ...

//routes/addusers.js (in the actions hook after getting properties from the controller)

var user = store.createRecord('user', {
            id: userData.uid,
            name: name   
          });
var responseSet = store.createRecord('response-set', {
            survey: survey,
            respondentid: user
          });

Ember.set(user, 'respSetSurveyLookup', [{'surveyId': _this.currentModel.get('id'),
                                         'respSetId': responseSet.get('id')}]);
Ember.set(user, 'surveysToTake' ,[_this.currentModel]);
_this.currentModel.get('respondents').pushObject(user);
Ember.RSVP.all([user.save(), _this.currentModel.save(), responseSet.save()])
   .then(function(){
      controller.setProperties({ multipleUsers: '', showAddUsers: false});
});

The user gets added as expected. However, in my template (which shows up on the same route as the 'add users' section, the same record shows up multiple times.

Additional info:

  • I'm using Ember 1.13.11 with Ember Data 1.13.11 and EmberFire 1.6.3
  • Refreshing the page or reloading (with a 'location.reload()' ) causes the user records to show up as expected.

This is possibly related to an Ember data issue which appears to be now closed and an upgrade of Ember data may resolve this in the future. However, is there anything I can do in the meantime to handle this issue ?




Aucun commentaire:

Enregistrer un commentaire