Problème fonction de classe renvoie toujours la même chose

Pour toutes les discussions javascript, jQuery et autres frameworks
Répondre
I_need_help_thank
Messages : 2
Enregistré le : 02 avr. 2021, 00:52

Problème fonction de classe renvoie toujours la même chose

Message par I_need_help_thank » 02 avr. 2021, 01:12

Bonjour, bonsoir ,
Voila je suis actuellement en train de faire un petit projet ou je crée dynamiquement des cocktails et tout ça :D .
J'ai actuellement mes 2 classes ingrédients et ingrédient:

Code : Tout sélectionner

export class Ingredients {

    constructor () {
        this.ingredients = [];  // list of instances of "Ingredient"
    }

    add(ingredient) {
        this.ingredients.push(new Ingredient(ingredient));
    }

    get_ingredient() {

        for(let i = 0; i <= this.ingredients.length; ++i)
        {
            return this.ingredients[i].get();
        }
    }
}

export class Ingredient {

    constructor(ingredient) {
        this.ingredient = ingredient;
    }

    get()
    {
        return this.ingredient;
    }

}
Donc voila quand je fais mon appel Ajax et que j'ajoute un ingrédient puis quand j'appelle ma fonction get_ingredient() , elle retourne toujours le premier que j'ai mis alors que quand je fais un console.log(this.ingredients) je vois qu'il y a mes 2 ingrédients.

Voila l'appel Ajax :
dans data.ingredient j'ai le nom de l'ingredient

Code : Tout sélectionner

let AjaxIngredient = ($self,liste_ingredient) => {
	let $data = $self.serialize();
	$self.hide();
	$.ajax({
		url: $self.attr("action"),
		method: $self.attr("method"),
		data: $data,
		dataType: "json",
	})
		.done(function (data) {
			if (data.hasOwnProperty("result")) {
				if (data.result) {
				
					//recuperer data.ingredient
					
					liste_ingredient.add(data.ingredient);
					console.log(liste_ingredient.get_ingredient());


				$("#message_formulaire").empty().append("<p style='color: green'>"+data.message+"</p>").fadeIn(1000);
				}else {
					$self.fadeIn(2000);
					if (data.hasOwnProperty("message")) {
						/* display message */
						$("#message_formulaire").empty().append("<p style='color: red' >"+data.message+"</p>").fadeIn(1000);
					}
				}

			}
		})
		.fail(function () {});
	return false;
}
j'ai également une autre question, j'ai mon instance de Ingredients (liste_ingredient qui est passé en parametre) parce qu'en gros je la crée des que la personne arrive sur la page puis je la passe dans 5 fonctions pour arriver a l'appel Ajax ça m'a pas l'air ouf :?: . Du coup je ne vois pas comment faire autrement :/ j'ai ça en gros :

Connexion
liste_ingredient = new Ingredients();
Appel fonction1(liste_ingredient);

fonction1(
appel fonction2(liste_ingredient)
);

fonction2(
appel fonction3.....

jusqu'à l'appel Ajax vu que c'est que des fonctions imbriquées.


Bon voila j'ai fait un beau pavé xD J'espère surtout avoir été clair :)
Merci beaucoup a tout ceux qui prendront le temps de me répondre <3

Avatar du membre
webmaster
Administrateur du site
Messages : 398
Enregistré le : 28 févr. 2017, 15:19

Re: Problème fonction de classe renvoie toujours la même chose

Message par webmaster » 02 avr. 2021, 09:29

Bonjour,

Le fonctionnement décrit est logique
La boucle suivante s'arrete au premier élément trouvé dès qu'il y a un return

Code : Tout sélectionner

        for(let i = 0; i <= this.ingredients.length; ++i)
        {
            return this.ingredients[i].get();
        }
Il faut retourner le tableau complet et faire la boucle au moment de l'affichage
TJS : 20 ans et mon livre Tout JavaScript chez Dunod
https://www.toutjavascript.com/livre/index.php

I_need_help_thank
Messages : 2
Enregistré le : 02 avr. 2021, 00:52

Re: Problème fonction de classe renvoie toujours la même chose

Message par I_need_help_thank » 02 avr. 2021, 11:21

C'est ça le soucis quand je veux bosser tard xD j'arrive plus a réfléchir :oops: :oops: :oops: :roll:
Anyways merci beaucoup. :)

Répondre