Repeater do not load before my fonction

Hi there,

I tried to round repeater text. The function worked well in preview mode. I assume the repeater are already load in preview mode. But, when I refresh the page or i am on the publish web page, my function do not work. The following error come out : Error: The element selector function (usually $w) cannot be used before the page is ready

This is my code :

import wixData from 'wix-data';

 formatMontantsPage('#listRepeater', '#text50');
 formatMontantsPage('#repeater1', '#text53');
 
 function formatNumber(decimalPrecision) {
     return (Math.round(decimalPrecision * 100) / 100).toFixed(2); 
}

function separerMilles(stringNumber) {
    let partieNumeriqueFormatte = parseInt(stringNumber).toLocaleString();
    let partieDecimale = stringNumber.slice( stringNumber.indexOf('.') );

    return  partieNumeriqueFormatte + partieDecimale;  
}

function formatMontantsPage(repeteur, nomChamp){
 /*Line64  with the error*/ $w(repeteur).forEachItem( ($item, itemData, index) => {

                 $item(nomChamp).text =  separerMilles(formatNumber(itemData.montant) );

    } );

}

I have try to put onReady a little bit everywhere, change forEachItem by onItemReady and add a delay before all. Without succes, I ask for your generosity !

On preview mode :

On publish site :

Thanks !

Okeyyy mon ami, faisons quelques changements sur ton code, excuse moi de la demontage de ton code :grin:

import wixData from 'wix-data';

var repeteur = [], nomChamp = [];
    repeteur[0] = "#listRepeater";
    repeteur[1] = "#repeater1";
    nomChamp[0] = "#text50";
    nomChamp[1] = "#text53";
     
$w.onReady(()=>{
   $w(repeteur[0]).onItemReady(($item,itemData,index)=>{
      $item(nomChamp[0]).text =  separerMilles(formatNumber(itemData.montant));
   });
   $w(repeteur[1]).onItemReady(($item,itemData,index)=>{
      $item(nomChamp[1]).text =  separerMilles(formatNumber(itemData.montant));
   });
});

function formatNumber(decimalPrecision) {
   return (Math.round(decimalPrecision * 100) / 100).toFixed(2); 
}

function separerMilles(stringNumber) {
   let partieNumeriqueFormatte = parseInt(stringNumber).toLocaleString();
   let partieDecimale = stringNumber.slice( stringNumber.indexOf('.') );
   return  partieNumeriqueFormatte + partieDecimale;  
}

Et voila, ton code est plus la … tralala…

1 Like

Wow, c’est gentil de ton temps et de ta vitesse !

Le résultat est le même que mon imprime écran On publish site, mais sans le message d’erreur. :roll_eyes:

Pourtant j’ai log les résultats

 
console.log(separerMilles(formatNumber(itemData.montant)));

il m’a bien sorti 1 320.00 mais le

console.log((nomChamp[1]).text);

m’a renvoyé undefined

@alexi_cliche
Petit autre example pour toi… regard bien et trouve la difference!

$w.onReady(async function () {
    let value = 222222222
    
    let xxx =  await separerMilles(formatNumber(value)); console.log(xxx)
    $w('#text1').text = xxx
});

function formatNumber(decimalPrecision) {
   return (Math.round(decimalPrecision * 100) / 100).toFixed(2); 
}

function separerMilles(stringNumber) {
   let partieNumeriqueFormatte = parseInt(stringNumber).toLocaleString();
   let partieDecimale = stringNumber.slice( stringNumber.indexOf('.') );
   return  partieNumeriqueFormatte + partieDecimale;  
}