פונקציית includes מחזירה לי שגיאה, פעם כן פעם לא.
-
אני מנסה לעשות חיפוש על נתונים ששמרתי אותם במשתנה בטעינת הדף, כך:
let data2; let queryResults; $w.onReady(async function () { queryResults = await wixData.query("muzarim") .descending("seder") .limit(10) .find(); $w('#repeater1').data = queryResults.items; data2 = await getTeamData();
כלומר אני ממלא 10 פרטים לבנתיים, ומפעיל פונקצייה בשרת ששולחת לבנתיים את הכל ושומר במשתנה, ואני מנסה שכאשר מבצעים סינונים זה יסנן אם מכיל חלק מהמחרוזת, למשל אם אני מחפש מקט 123 יביא לי גם 12345. זה הקוד שכתבתי:
console.log(data2); const data9 = data2.filter(did => did.mkt.includes($w('#mktinput').value,)); $w('#repeater1').data = data9;
זה מדפיס לי את המשתנה עם כל הפריטים (מצורף צילום), לכאורה מראה שיש מידע, וזה גם עבד, פתאום לא עובד, ומחזיר לי את השגיאה הזו, זה קרה לי כמה פעמים וחזר מה יכול להיות? אולי זה לא כתוב נכון?
תודה. @dovid אשמח לעזרה
-
@אבי-203 אתה עובר בלולאה על כל האיברים של data2, ומניח שלכל איבר יש מפתח בשם mkt וממילא מפעיל עליו את המתודה includes, זה עובד טוב באיברים הראשונים בגלל שהם באמת מכילים את המפתח הזה, וכנראה אחד מהאיברים לא מכיל את המפתח ולכן זה מחזיר שגיאה.
תפתח את ההדפסה של ה data2, ותבדוק בדיוק מה הוא מכיל -
-
@אבי-203 אמר בפונקציית includes מחזירה לי שגיאה, פעם כן פעם לא.:
אני מבין שאופציית ב. זה אפשרות שנייה יש אפשרות נוספת להשאיר רק עשר.
התכוונתי להעיר שני דברים, א' שלכאורה אין צורך להוריד את האחרים וב' אם אתה דוקא רוצה להוריד אז עושים את זה על ידי
splice
. -
@yossiz הבנתי כלומר דבר כזה מוחק לי עשרה פריטים ומביא את השאר.
כלומר זה מוחק לי מהמשתנה בדף, שבשימושים הבאים הוא כבר יהיה פחות 10.const muzarim0= data2.splice(10); $w('#repeater1').data = muzarim0;
תודה זה גם שימושי וחשוב. אז לא הסברתי טוב, אני לא יודע איך לעשות שיציג רק עשר ראשונים למשל מבלי למחוק. אשמח לדוגמא איך מציגים רק חלק תודה
-
@יוסף-בן-שמעון עזר לי נהדר.
-
-
@yossiz אם אני מבין נכון, זה מגדיר מעתה את המשתנה רק בעשר פריטים, המשמעות של זה שזה מוחק לי את השאר, לשימוש עתידי, יש אפשרות רק הצגה של 10 מבלי למחוק את השאר, או שאני לא מבין נכון. כי בדיקה שעשיתי עכשיו זה הגדיר לי את המשתנה לכל הדף מעתה רק ל10 פריטים הללו.
-
@אבי-203 לפי בדיקה מהירה שלי אין דרך להגביל את התצוגה לכמות מסויימת ב-repeater של wix. אז צריך להעתיק למערך חדש כמו ש-@WWW אמר:
const muzarim0 = [...data2].splice(0, 10);
הסבר:
[]
יוצר מערך חדש
[1, 2, 3]
יוצר מערך עם הערכים 1, 2, ו-3
[...data2]
יוצר מערך חדש עם הערכים של המערךdata2
splice(0, 10)
מוחק 10 ערכים מאינדקס 0, ומחזיר אותם במערך חדש.אפשר גם לעשות את הפעולה ב-2 שורות בלי ליצור מערך נוסף שלא לצורך:
const muzarim0 = [...data2]; muzarim0.splice(0, 10)
-
@yossiz אמר בפונקציית includes מחזירה לי שגיאה, פעם כן פעם לא.:
const muzarim0 = [...data2]; muzarim0.splice(0, 10)
כבר כמה שעות על זה. איפה אני טועה??? תמיד בשלב השני, כלומר הוא טוען את ה9 השניים, נטען בסך הכל 18 ואז הוא עוצר. נסיתי הכל..
let sac; let data3 // let data3; export async function box108_viewportEnter(event) { $w('#html1').show() console.log(sac); data2 = data2.items if (sac === undefined) { sac=9 data3 = await getTeamData2() } console.log(sac); const count = data3.push(); console.log(count); let sicum= count-sac if (sicum < 0) { $w('#sof').show() $w('#html1').hide() }else{ let data5 = [...data3]; data5 = data5.splice(sac,9) data2 = [...data2 ,...data5 ]; console.log(data3); console.log(data5); console.log(data2); // concat $w("#repeater10").data = data2 sac = sac + 9 $w('#html1').hide() } //Add your code for this event here: }
-
@yossiz אמר בפונקציית includes מחזירה לי שגיאה, פעם כן פעם לא.:
length
תודה רבה. גם על ה length, לא ידעתי שהיא מחשבת גם את זה.
הסבר:
כחלק מנסיונותי להאיץ את טעינת הדף, בניתי שבטעינת הדף מקבל 9 פריטים ולאחר מכן השרת שולח את הכל ושומר במשתנה, ואז כשגוללים לסוף הפריטים, אני מביא עוד תשע פריטים נוספים ומחבר אותם לקייימים. זה עובד נהדר, רק שהוא עוצר בפעם השנייה כנראה שזה מביא לו שוב את אותם ה9.
אני חישבתי את זה שבכל הפעלה של הפונקצייה אני מוסיף על משתנה sac +9 כך שכל פעם יתקדם ל9 הבאים, משהו בדרך אני טועה.
ושוב תודה רבהה// עם טעינת הדף הראשונה let data2; let data3; $w.onReady(async function () { // מקבל תשע פריטים ראשונים data3 = await wixData.query("muzarim") .descending("seder") // .skip(10) .limit(9) .find(); $w('#repeater10').data = data3.items; //פונקציית שיבוץ המידע ברפיטרים repiter() $w('#container').show() // מפעיל פונקציית דרך צד שרת שמביא לי את כל הפריטים ושומר במשתנה data2 data2 = await getTeamData2() }) // כאשר גוללים את הדף ומגיע לתחתית הפריטים ומתגלה אלמנט שנמצא בסוף, אני מנסה להוסיף בכל הפעלה של הפונקצייה הזו, עוד 9 פריטים הבאים, ולחבר אותם לקיימים. let sac; export async function box108_viewportEnter(event) { $w('#html1').show() console.log(sac); data3 = data3.items if (sac === undefined) { sac = 9 } console.log(sac); const count = data2.length; console.log(count); let sicum= count-sac if (sicum < 0) { $w('#sof').show() $w('#html1').hide() }else{ let data5 = [...data2]; let data8 = data5.splice(sac,9) data3 = [...data3 ,...data8 ]; console.log(data3); console.log(data5); console.log(data2); console.log(data8); $w("#repeater10").data = data3 sac = sac + 9 $w('#html1').hide() } }
-
@yossiz ואווו איזה מבריק!!!! תודדדה
צדקת אני עכשיו גם מבין למה זה בעייתי.
כי בעצם בפעם הראשונה הוא מפרק את זה ל data3.items
אח"כ בפעם השנייה כבר זה מפורק והוא מנסה לשוא לפרק את זה שוב.
אז העברתי את זה לטעינה הראשונה. תודדדהאיבדתי את הריכוז בכולל היום, בגלל הדבר הזה...
אגב מה שעשיתי זה הדרך המקובלת לטעון דפי מוצרים, או שיש דרכים יותר נכונות ופשוטות, ומהירות?.