2017-05-21 1 views
0

J'ai un service pour un calendrier d'affaires où une propriété n'est pas disponible pour une propriété calculée mais est disponible dans une méthode.Propriété dans Ember Service undefined

Dans le code ci-dessous la propriété calendriers n'est pas défini lorsque la calculée businessYear propriété est accessible. D'autre part, les calendriers sont définis lorsque la méthode year() est appelée.

Le CURRENTYEAR propriété est utilisé ailleurs si init() est appelée et la promesse de magasin est résolu avant businessYear est accessible. J'ai débogué ceci et les outils de développement montre que this.calenders est défini dans les variables de surveillance, mais est encore indéfini dans la propriété calculée. C'est presque comme si la propriété calculée était en cours d'exécution dans un autre contexte. Il me manque probablement quelque chose de vraiment basique mais je ne le vois pas.

app/services/business-calendar.js

import Ember from 'ember'; 
import moment from 'moment'; 

const { computed, inject: { service }, get, set } = Ember; 

const findCalendar = (date, calendars) => { 
    let p1, p13 

    return calendars.find(function (item, index, enumerable) { 
     p1 = moment(get(item, 'p1')); 
     p13 = moment(get(item, 'p13')); 
     return moment.range(p1, p13).contains(date); 
    }) 
} 

export default Ember.Service.extend({ 
    store: service(), 
    calendars: [], 

currentDate: computed(() => { 
    return moment(); 
}), 

currentYear: computed('currentDate',() => { 
    return moment(get(this, 'currentDate')).year(); 
}), 

businessYear: computed(() => { 
    let calendar = findCalendar(moment(), get(this, 'calendars')); 
    return get(this.calendar, 'year'); 
}), 

init() { 
    this._super(...arguments); 
    get(this, 'store').findAll('calendar').then((recs) => { 
     set(this, 'calendars', recs); 
    }) 
}, 

year(date) { 
    let d = moment(date); 
     var calendar = findCalendar(d, get(this, 'calendars’)); 
     return get(calendar, 'year'); 
    } 
}); 

Répondre

0

Grâce à des commentaires sur la Slack Ember nourrir la question est l'utilisation des fonctions de direction dans les propriétés calculées. Cela crée un «ceci» ou un contexte différent. Le code de travail est ci-dessous. Remarque même si les propriétés calculées currentDate et currentYear fonctionnaient, toutes les fonctions de flèche ont été supprimées pour la cohérence du code.

import Ember from 'ember'; 
import moment from 'moment'; 

const { computed, inject: { service }, get, set } = Ember; 

const findCalendar = (date, calendars) => { 
    let p1, p13 

return calendars.find(function (item, index, enumerable) { 
    p1 = moment(get(item, 'p1')); 
    p13 = moment(get(item, 'p13')); 
    return moment.range(p1, p13).contains(date); 
}) 
} 

export default Ember.Service.extend({ 
    store: service(), 
    calendars: [], 

currentDate: computed(function() { 
    return moment(); 
}), 

currentYear: computed('currentDate', function() { 
    return moment(get(this, 'currentDate')).year(); 
}), 

businessYear: computed(function() { 
    let calendar = findCalendar(moment(), get(this, 'calendars')); 
    return get(this.calendar, 'year'); 
}), 

init() { 
    this._super(...arguments); 
    get(this, 'store').findAll('calendar').then((recs) => { 
     set(this, 'calendars', recs); 
    }) 
}, 

year(date) { 
    let d = moment(date); 
    var calendar = findCalendar(d, get(this, 'calendars’)); 
    return get(calendar, 'year'); 
} 
});