J'utilise jQuery depuis quelques années avec une compréhension très limitée du javascript vanilla. Scope, le modèle d'objet, et la plupart des modèles de conception que je vois utilisés dans javascript me déroutent. J'essaie d'implémenter une classe qui sera éventuellement utilisée dans un greffon d'ordonnancement que j'ai besoin d'écrire et j'ai du mal à comprendre pourquoi les données stockées dans l'un des membres de ma classe ne semblent pas disponibles. Je ne suis pas sûr si le problème est avec la portée ou un autre comportement que je ne comprends pas.Pourquoi mon membre de classe de données n'est-il pas directement disponible?
J'ai le code suivant avec 2 questions dans les commentaires aux endroits appropriés. La première question est de savoir si ma solution de contournement de portée dans mon appel getJSON est la façon correcte de gérer le problème de portée dans getJSON. Ma deuxième question est pourquoi je ne peux pas accéder directement à schedule.data.
function Schedule() {
this.year = null;
this.month = null;
this.day = null;
this.start_datetime = null;
this.start_timestamp = null;
this.end_datetime = null;
this.end_timestamp = null;
this.data = [];
return this;
}
Schedule.prototype.init = function() {
var url = '/tripsys/new_admin/employee_schedule/get_employee_schedule_data/' + this.start_timestamp + '/' + this.end_timestamp;
var self = this; // 1. trying to work around scope issues. Is this the correct way to handle the scope problems here?
$.getJSON(url, function(data) {
self.data = data;
});
}
var schedule = new Schedule();
$(document).ready(function() {
schedule.year = $('#year').text();
schedule.month = $('#month').text();
schedule.day = $('#day').text();
schedule.start_datetime = new Date(schedule.year, schedule.month - 1, schedule.day);
schedule.start_timestamp = Math.round(schedule.start_datetime.getTime()/1000);
schedule.end_datetime = new Date(schedule.year, schedule.month - 1, schedule.day, 23, 59, 59);
schedule.end_timestamp = Math.round(schedule.end_datetime.getTime()/1000);
schedule.init();
console.log(schedule); // if I log the whole schedule object the data that I expect to be in the "data" member is there
console.log(schedule.data); // 2. why is the data that I expect to be in the "data" member not there when I access schedule.data directly?
});
Nous vous remercions de votre compréhension.
Sur une note de côté, vous devriez vraiment comprendre la langue que vous travaillez avec, surtout après l'avoir utilisé pendant 2 ans. Je suggère de lire un peu sur le sujet. –
Je suis d'accord.Dans le passé, j'ai fait plus de travail de backend et je n'ai jamais eu besoin de faire quoi que ce soit de plus avec javascript que de simples manipulations dom qui jQuery résume vraiment bien. Il est temps de commencer à mieux comprendre le javascript. Merci à tous pour l'aide. –
Ahh, ça a plus de sens. Je suis maintenant en train de m'enseigner la programmation web maintenant, ce qui implique bien entendu l'apprentissage de js. –