vendredi 12 juin 2015

Ember Services - Create default settings for application

My app has a lot of reports, and I have dateBegin and dateEnd in all of then.

The desired behaviour is:

  • app first load, dateBegin = month begin (jun-01) / dateEnd = today (jun-11)
  • when user change dates (let's say to mai-01 / mai-31), all controllers get the new dates

The code that I have now:

// app/services/defaults.js

import Ember from 'ember';

export default Ember.Service.extend({
  init: function () {
    this._super();
    var dateEnd = moment().format('YYYY-MM-DD');
    var dateBegin = moment().startOf('month').format('YYYY-MM-DD'));
    
    if (!this.get('dateEnd')) { this.set('dateEnd', dateEnd); }
    if (!this.get('dateBegin')) { this.set('dateBegin', dateBegin }
  }
});
// app/components/select-dates-in-reports.js

import Ember from 'ember';

export default Ember.Component.extend({

  defaults: Ember.inject.service(),

  displayDateBegin: null,
  displayDateEnd: null,
  dateBegin: Ember.computed.alias('defaults.dateBegin'),
  dateEnd: Ember.computed.alias('defaults.dateEnd'),

  setInitialParams: Ember.on('init', function () {
    this.set('displayDateBegin', this.get('dateBegin'));
    this.set('displayDateEnd', this.get('dateEnd'));
  }),

  actions: {
    chooseParams: function () {
      this.set('dateBegin', this.get('displayDateBegin'));
      this.set('dateEnd', this.get('displayDateEnd'));
    }
  }
});
// app/mixins/query-params-for-reports.js

import Ember from 'ember';

export default Ember.Mixin.create({
  queryParams: ['dateBegin', 'dateEnd'],

  defaults: Ember.inject.service(),

  dateBegin: Ember.computed.alias('defaults.dateBegin'),
  dateEnd: Ember.computed.alias('defaults.dateEnd')
});

It works as desired just after each controller is initialized:

  • user enter the app, and visit controller1. dateBegin = jun-01 / dateEnd = jun-11
  • on the same controller1, user change dates to dateBegin = mai-01 / dateEnd = mai-31
  • user visit controller2. Here is the Problem. The dates are set to dateBegin = jun-01 / dateEnd = jun-11
  • on the same controller2, user change dates to dateBegin = apr-01 / dateEnd = apr-30
  • user visit controller1 again. Now it works. The dates are set to dateBegin = apr-01 / dateEnd = apr-30

I tried all I could find over the net. Create Initializers, used localStorage, etc. Nothing works.

Can anyone helps me?? thanks!




Aucun commentaire:

Enregistrer un commentaire