Hello guys
I have a little error in my code, but i don’t know what is it…
If you can help me !
I have 2 function in my $w.onReady(function)
1 function is a filter, and the next function is for calcul between 2 collumns.
If i use my 2 function separetely it’s works. But I need the function “myFunction” works on the function filter
If anyone have an idea I take 
I have this error in my code
import wixData from 'wix-data';
let searchWords, inputString, lastFilterTitle, NbST;
$w.onReady(function () {
$w("#input4") . onKeyPress((event) => {
$w('#button5') . onClick((event2)=>{console.log("Button clicked")
myFunction()
$w('#listRepeater') . expand();
let debounceTimer;
if(debounceTimer) {
clearTimeout(debounceTimer);
debounceTimer = undefined;
}
debounceTimer = setTimeout(() => {
inputString = $w("#input4").value;
searchWords = inputString . split(" ");
runFilter(searchWords);
}, 200);
function runFilter(wordArray){
let filterSetting = wixData . filter();
for (let i=0; i < wordArray . length; i++)
{
filterSetting = filterSetting
. contains('Joueuse1TF', wordArray[i])
. or(
filterSetting
. contains('Joueuse2TF', wordArray[i])
)}
if (lastFilterTitle !== inputString) {
$w('#dataset1'). setFilter(filterSetting);
lastFilterTitle = inputString;
}
function myFunction () { wixData . query("TennisFeminin")
. limit(1000)
. find()
. then( (results) => {
if(wordArray . length > 0)
{
let count = wordArray . length;
for (var i = 0; i < count; i++) {
let NbSJ1TFF= wordArray . items[i].NbSJ1TF;
let NbSJ2TFF= wordArray . items[i].NbSJ2TF;
NbST = NbSJ1TFF+NbSJ2TFF
}
$w('#text65') . text = String(NbST);
}
else
{
}
} )
.catch( (err) => {
let errorMsg = err;
} );
}
}
})
})
});
my function is in an embeded click function within the key press function; probably some missing } ) . also your myfunction is inside of run Filter function. your formatting needs refactoring
I have modified my code correctly.
But my code is not working correctly
import wixData from 'wix-data';
let searchWords, inputString, lastFilterTitle;
$w.onReady(function () {
$w("#input4").onKeyPress((event) => {
$w('#listRepeater').expand();
let debounceTimer;
if(debounceTimer) {
clearTimeout(debounceTimer);
debounceTimer = undefined;
}
debounceTimer = setTimeout(() => {
inputString = $w("#input4").value;
searchWords = inputString.split(" ");
runFilter(searchWords);
}, 200);
function runFilter(wordArray){
let filterSetting = wixData.filter();
for (let i=0; i < wordArray.length; i++)
{
filterSetting = filterSetting
.contains('Joueuse1TF', wordArray[i])
.or(
filterSetting
.contains('Joueuse2TF', wordArray[i])
)}
if (lastFilterTitle !== inputString) {
$w('#dataset1').setFilter(filterSetting);
lastFilterTitle = inputString;
}
}
})
$w('#button5').onClick((event)=>{console.log("Button clicked")
myFunction()
$w('#listRepeater').data;
})
var NbST
function myFunction () { wixData.query("TennisFeminin")
.limit(1000)
.find()
.then( (results) => {
if(results.items.length >= 0)
{
let count = results.items.length;
for (var i = 0; i < count; i++) {
let NbSJ1TFF= results.items[i].NbSJ1TF;
let NbSJ2TFF= results.items[i].NbSJ2TF;
NbST = Number(NbSJ1TFF)+Number(NbSJ2TFF)
}
$w('#text65').text = NbST.toString();
}
else
{
}
} )
.catch( (err) => {
let errorMsg = err;
} );
}
});
Can you elaborate more on the issue you are having and what you tried to do do solve it?
I don’t see many console.log(); 's in your code.
however, i think i can see some issues in the code,
import wixData from 'wix-data';
let searchWords, inputString, lastFilterTitle;
$w.onReady(function () {
$w("#input4").onKeyPress((event) => {
$w('#listRepeater').expand();
let debounceTimer;
if(debounceTimer) {
clearTimeout(debounceTimer);
debounceTimer = undefined;
}
debounceTimer = setTimeout(() => {
inputString = $w("#input4").value;
searchWords = inputString.split(" ");
runFilter(searchWords);
}, 200);
function runFilter(wordArray){
let filterSetting = wixData.filter();
for (let i=0; i < wordArray.length; i++)
{
filterSetting = filterSetting
.contains('Joueuse1TF', wordArray[i])
.or(
filterSetting
.contains('Joueuse2TF', wordArray[i])
)}
if (lastFilterTitle !== inputString) { <-- lastFilterTitle doesn't seem to get set anywhere?
$w('#dataset1').setFilter(filterSetting);
lastFilterTitle = inputString;
}
}
})
$w('#button5').onClick((event)=>{
console.log("Button clicked")
myFunction()
$w('#listRepeater').data; <-- not sure this does anything?
})
var NbST
function myFunction () { wixData.query("TennisFeminin")
.limit(1000)
.find()
.then( (results) => {
if(results.items.length >= 0)
{
let count = results.items.length;
for (var i = 0; i < count; i++) {
let NbSJ1TFF= results.items[i].NbSJ1TF;
let NbSJ2TFF= results.items[i].NbSJ2TF;
NbST = Number(NbSJ1TFF)+Number(NbSJ2TFF)
}
$w('#text65').text = NbST.toString();
}
else
{
}
} )
.catch( (err) => {
let errorMsg = err;
} );
}
});
Hi,
My calculations in console.log is good, but when I clicked on the ‘button5’, the ‘button5’ running ‘myFunction’ for my calculation, and after the results are show in the ‘text65’ in the repeater. But the ‘text65’ repeat only 1 results ‘3’ on all my repeated. My result can to be ‘2’ or ‘3’ (because I calcul the number of set on woman tennis match from data in my collection) and it’s not repeated correctly in my repeater…
In my previous answer I have share screenshoot. Go look !
Cordially
import wixData from 'wix-data';
let searchWords, inputString, lastFilterTitle; //Here lastFilterTitle is declared
$w.onReady(function () {
$w("#input4").onKeyPress((event) => {
$w('#listRepeater').expand();
let debounceTimer;
if(debounceTimer) {
clearTimeout(debounceTimer);
debounceTimer = undefined;
}
debounceTimer = setTimeout(() => {
inputString = $w("#input4").value;
searchWords = inputString.split(" ");
runFilter(searchWords);
}, 200);
function runFilter(wordArray){
let filterSetting = wixData.filter();
for (let i=0; i < wordArray.length; i++)
{
filterSetting = filterSetting
.contains('Joueuse1TF', wordArray[i])
.or(
filterSetting
.contains('Joueuse2TF', wordArray[i])
)}
if (lastFilterTitle !== inputString) { //Line 2 the lastFilter is declared
$w('#dataset1').setFilter(filterSetting);
lastFilterTitle = inputString;
}
}
})
$w('#button5').onClick((event)=>{console.log("Button clicked")
myFunction()
$w('#listRepeater').data; // I don't think this line is good..
})
var NbST
function myFunction () { wixData.query("TennisFeminin")
.limit(1000)
.find()
.then( (results) => {
if(results.items.length > 0)
{
let count = results.items.length;
for (var i = 0; i < count; i++) {
let NbSJ1TFF = results.items[i].NbSJ1TF;
let NbSJ2TFF = results.items[i].NbSJ2TF;
NbST = Number(NbSJ1TFF)+Number(NbSJ2TFF)
console.log(NbST) //My calculations are good in the console log for all lines in data collection
}
$w('#text65').text= NbST.toString();
}
else
{
}
} )
.catch( (err) => {
let errorMsg = err;
} );
}
});
if(lastFilterTitle !== inputString){
$w('#dataset1').setFilter(filterSetting);
lastFilterTitle = inputString; <== my bad, didn't see this being set here
}
your loop just sets NBST to the calculation and outputs , it doesnt do anything with it:
for (var i = 0; i < count; i++) {
let NbSJ1TFF = results.items[i].NbSJ1TF;
let NbSJ2TFF = results.items[i].NbSJ2TF;
console.log(NbST)
} <-- loop ends here
NbST == last calculation above
I think you need to do something like:
function myFunction(){
wixData.query("TennisFeminin").limit(1000).find()
.then(
(results)=>{
if(results.items.length >0){
let _items = result.items;
_items.forEach( item => { item.NbST = Number(item.NbSJ1TFF)+Number(item.NbSJ2TFF) } );
$w("#myRepeater").data= _items;
$w("#myRepeater").forEachItem( ($item, itemData, index) => {
$item('#text65').text = itemData.NbST.toString();
} );
Hi,
I have try your code, but I have an error when I click on the button5
" external_wix_data_default(…).query(…).then is not a function"
An idea my friend ?
My code actually is this :
import wixData from 'wix-data';
let searchWords, inputString, lastFilterTitle;
$w.onReady(function () {
$w("#input4").onKeyPress((event) => {
$w('#listRepeater').expand();
let debounceTimer;
if(debounceTimer) {
clearTimeout(debounceTimer);
debounceTimer = undefined;
}
debounceTimer = setTimeout(() => {
inputString = $w("#input4").value;
searchWords = inputString.split(" ");
runFilter(searchWords);
}, 200);
function runFilter(wordArray){
let filterSetting = wixData.filter();
for (let i=0; i < wordArray.length; i++)
{
filterSetting = filterSetting
.contains('Joueuse1TF', wordArray[i])
.or(
filterSetting
.contains('Joueuse2TF', wordArray[i])
)}
if (lastFilterTitle !== inputString) {
$w('#dataset1').setFilter(filterSetting);
lastFilterTitle = inputString;
}
}
})
$w('#button5').onClick((event)=>{console.log("Button clicked")
myFunction()
$w('#listRepeater').data;
})
var NbST
function myFunction () { wixData.query("TennisFeminin")
.then( (results) => {
if(results.items.length >0){
let _items = results.items;
_items.forEach( item => { item.NbST = Number(item.NbSJ1TFF)+Number(item.NbSJ2TFF) } );
$w("#listRepeater").data= _items;
$w("#listRepeater").forEachItem( ($item, itemData, index) => {
$item('#text65').text = itemData.NbST.toString();
})}
Im not on desktop atm, but after a quick look, I think maybe after wixData.query() you need .go() or .find()
Description
The query() function builds a query on the specified collection and returns a WixDataQuery object.
The returned object contains the query definition which is typically used to run the query using the find() function.
I have add .find but it’s not working…
My last code was perfect, but I don’t understand why I get the same result on all my repeater…
In the console.log i have all result, but in the repeater all time ‘3’…
With this code :
import wixData from 'wix-data';
let searchWords, inputString, lastFilterTitle;
$w.onReady(function () {
$w("#input4") . onKeyPress((event) => {
$w('#listRepeater') . expand();
let debounceTimer;
if(debounceTimer) {
clearTimeout(debounceTimer);
debounceTimer = undefined;
}
debounceTimer = setTimeout(() => {
inputString = $w("#input4").value;
searchWords = inputString . split(" ");
runFilter(searchWords);
}, 200);
function runFilter(wordArray){
let filterSetting = wixData . filter();
for (let i=0; i < wordArray . length; i++)
{
filterSetting = filterSetting
. contains('Joueuse1TF', wordArray[i])
. or(
filterSetting
. contains('Joueuse2TF', wordArray[i])
)}
if (lastFilterTitle !== inputString) {
$w('#dataset1') . setFilter(filterSetting);
lastFilterTitle = inputString;
}
}
})
$w('#button5') . onClick((event)=>{console . log("Button clicked")
myFunction()
$w('#listRepeater') . data;
})
var NbST
function myFunction () { wixData.query("TennisFeminin")
. limit(1000)
. find()
. then( (results) => {
if(results . items . length > 0)
{
let count = results . items . length;
for (var i = 0; i < count; i++) {
let NbSJ1TFF = results.items[i] . NbSJ1TF;
let NbSJ2TFF = results.items[i] . NbSJ2TF;
NbST = Number(NbSJ1TFF)+Number(NbSJ2TFF)
console.log(NbST)
$w('#text65').text= NbST . toString();
}
}
else
{
}
} )
. catch( (err) => {
let errorMsg = err;
} );
}
});
With this code i have this error…
import wixData from 'wix-data';
let searchWords, inputString, lastFilterTitle;
$w.onReady(function () {
$w("#input4").onKeyPress((event) => {
$w('#listRepeater').expand();
let debounceTimer;
if(debounceTimer) {
clearTimeout(debounceTimer);
debounceTimer = undefined;
}
debounceTimer = setTimeout(() => {
inputString = $w("#input4").value;
searchWords = inputString.split(" ");
runFilter(searchWords);
}, 200);
function runFilter(wordArray){
let filterSetting = wixData.filter();
for (let i=0; i < wordArray.length; i++)
{
filterSetting = filterSetting
.contains('Joueuse1TF', wordArray[i])
.or(
filterSetting
.contains('Joueuse2TF', wordArray[i])
)}
if (lastFilterTitle !== inputString) {
$w('#dataset1').setFilter(filterSetting);
lastFilterTitle = inputString;
}
}
})
$w('#button5').onClick((event)=>{console.log("Button clicked")
myFunction()
$w('#listRepeater').data;
})
var NbST
function myFunction () { wixData.query("TennisFeminin")
.limit(1000)
.find()
.then( (results) => {
if(results.items.length > 0)
{
let count = results.items.length;
for (var i = 0; i < count; i++) {
let NbSJ1TFF = results.items[i].NbSJ1TF;
let NbSJ2TFF = results.items[i].NbSJ2TF;
NbST = Number(NbSJ1TFF)+Number(NbSJ2TFF)
console.log(NbST)
$w("#listRepeater").data= NbST;
$w('#text65').text= NbST.toString();
}
}
else
{
}
} )
.catch( (err) => {
let errorMsg = err;
} );
}
});
Yes the error is because you are trying to set all the data in the repeater to a number not a collection of data - an array of items;
You need to read up on repeaters again and try to understand the code.
Your code is not perfect as it does not work and you are trying to do things illogically;
I already explained why you are getting the same number in each #text65 above…
you must set the text element in each row of the repeater using the repeater foreachitem;
like this:
$w('#button5').onClick((event)=>{console.log("Button clicked")
myFunction()
});
var NbST
$w("#listRepeater").forEachItem( ($item, itemData, index) => { // REPEAT THROUGH ALL THE ROWS OF DATA WE SET BELOW IN THE .then( function;
$item('#text65').text = itemData.NbST.toString(); // now we have access to ONE #text65 element in this row which we set to this rows calculation;
});
function myFunction () {
wixData.query("TennisFeminin").find() // <-- added the find for you;
.then( (results) => {
if(results.items.length >0){
let _items = results.items;
_items.forEach( item => { item.NbST = Number(item.NbSJ1TFF)+Number(item.NbSJ2TFF) } ); // save the calculation for later;
$w("#listRepeater").data= _items; // <- set the rows of data to the repeater data list;
}
}
);
}
This is what is wrong with your code (apart from not using $w(“#listRepeater”).forEachItem( … ) ) :
for (var i = 0; i < count; i++) {
let NbSJ1TFF = results.items[i].NbSJ1TF;
let NbSJ2TFF = results.items[i].NbSJ2TF;
NbST = Number(NbSJ1TFF)+Number(NbSJ2TFF)
console.log(NbST) <-- this will work as a calculation you will get your number here
$w("#listRepeater").data= NbST; <-- this is a number (3) not an array of data rows eg [{"_id":1, NbSJ1TF: 1, NbSJ2TF:2}, {"_id":2, NbSJ1TF: 3, NbSJ2TF:4}];
$w('#text65').text= NbST.toString(); <-- this selects EVERY #text65 in EVERY ROW in the repeater and sets all of them to NbST over and over again for each row of the database matching your filter query;
}
If you need more help, read this:
and this:
Hi my friend,
I have this error now… I don’t understand lol…
Have you an idea ?
import wixData from 'wix-data';
let searchWords, inputString, lastFilterTitle;
$w.onReady(function () {
$w("#input4").onKeyPress((event) => {
$w('#listRepeater').expand();
let debounceTimer;
if(debounceTimer) {
clearTimeout(debounceTimer);
debounceTimer = undefined;
}
debounceTimer = setTimeout(() => {
inputString = $w("#input4").value;
searchWords = inputString.split(" ");
runFilter(searchWords);
}, 200);
function runFilter(wordArray){
let filterSetting = wixData.filter();
for (let i=0; i < wordArray.length; i++)
{
filterSetting = filterSetting
.contains('Joueuse1TF', wordArray[i])
.or(
filterSetting
.contains('Joueuse2TF', wordArray[i])
)}
if (lastFilterTitle !== inputString) {
$w('#dataset1').setFilter(filterSetting);
lastFilterTitle = inputString;
}
}
})
$w('#button5').onClick((event)=>{console.log("Button clicked")
myFunction()
});
var NbST
$w("#listRepeater").forEachItem( ($item, itemData, index) => {
$item('#text65').text = itemData.NbST.toString();
});
function myFunction () {
wixData.query("TennisFeminin").find() // <-- added the find for you;
.then( (results) => {
if(results.items.length >0){
let _items = results.items;
_items.forEach( item => {
item.NbST = Number(item.NbSJ1TFF)+Number(item.NbSJ2TFF)})
console.log(NbST)
$w("#listRepeater").data= _items; // <- set the rows of data to the repeater data list;
}
else
{
}
})
.catch( (err) => {
let errorMsg = err;
} );
}
});
$w("#listRepeater").forEachItem(($item, itemData, index)=>{ //<-- This should run every time you update $w("#listRepeater").data
console.log(itemData); // <-- lets see whats inside itemData;
$item('#text65').text = itemData.hasOwnProperty('NbST') && itemData.NbST ? itemData.NbST.toString() : "EMPTY"; // <-- NbST will be empty and not exist until you click the button, this will check if it exists;
});
oops this should also be:
item.NbST =Number(item.NbSJ1TFF)+Number(item.NbSJ2TFF)}) console.log(item.NbST);
What does console . log ( itemData ); show in the console? If you screen shot please expand the object and any first level objects within it.
@jay65866 NbST doesn’t exist in my collection my friends, because NbST it’s :
for ( var i = 0 ; i < count ; i ++ ){
let NbSJ1TFF = results . items [i]. NbSJ1TF ;
let NbSJ2TFF = results . items [i]. NbSJ2TF ;
NbST = Number ( NbSJ1TFF ) + Number ( NbSJ2TFF )
console . log ( NbST )