@איש-נחמד אני תוהה אם זו הבעיה הראשונה שנתקלת עד היום בתחום הזה, איך אפשר לבנות ממשק משתמש עם אג'קס בלי פריימוורק?
יוסף בן שמעון
-
JS - החלפת רכיב מורכב בדף, מה עדיף? -
פרקטיקת התמודדות מוצלחת עם מחרוזות טקסט ארוכות@צדיק-תמים אמר בפרקטיקת התמודדות מוצלחת עם מחרוזות טקסט ארוכות:
קודם חשבתי לתומי שמוכרחים בשביל כזה דבר להשתמש בספריות דוגמת זו...
כמובן שיש יתרון עיצובי לספריות האלו, התג פרוגרס מאד בנאלי
-
פרקטיקת התמודדות מוצלחת עם מחרוזות טקסט ארוכות@dovid צודק, אני חוזר בי
-
פרקטיקת התמודדות מוצלחת עם מחרוזות טקסט ארוכות -
פרקטיקת התמודדות מוצלחת עם מחרוזות טקסט ארוכות@dovid אני חושב שתחזוקה של כזה דבר זה מאד קשה, עדיף לעשות את זה עם קצת יותר שורות ולהקל על התחזוקה
תשווה לקוד שלך את זה למשלfunction GetPersonTemplate(name, age, title){ const li = $('<li></li>') li.addClass('s-sidebarwidget--item d-flex px16') const ageDiv = $('<div></div>') ageDiv.attr('title', title) ageDiv.text(age) li.append(ageDiv) retuen li } -
פרקטיקת התמודדות מוצלחת עם מחרוזות טקסט ארוכות@צדיק-תמים תביא דוגמא קונקרטית שנוכל לדון עליה (יש לי דיב עם תוכן X אני רוצה למלאות אותו בY לפי תנאי Z)
-
פרקטיקת התמודדות מוצלחת עם מחרוזות טקסט ארוכות@צדיק-תמים חוששני שהפתרון הכי נקי הוא לעבוד עם המתודות של JS שמשנות את הHTML, (createElement וחברותיה).
ואפשר גם להעזר ב jQuery שמקצר את התהליכים.
אבל בשום אופן לא לשרשר מחרוזת ארוכה של HTML -
Sequelize מיון לפי נתוני טבלה אחרת@dovid תודה!
רק למען התיעוד לבאים אחרי, יש גם אפשרות לסאב שאילתות בצורה פשוטה:
https://sequelize.org/master/manual/sub-queries.html -
אתר להורדה מיוטיוב דרך API (שעובד בנטפרי)@צדיק-תמים לא יעזור, צריך תוכנה בדסקטופ, או לחילופין אם אתה ממש פריק אתה יכול לנסות להקים שרת עם כתובות אייפי רנדומליות ולהזרים דרכו את ההורדה
-
אתר להורדה מיוטיוב דרך API (שעובד בנטפרי)@5566brs אני חושב שגוגל לא מאשרים תוספים שמסייעים להורדה מיוטיוב, כך שזה אפשרי רק דרך כלי דסקטופי
-
אתר להורדה מיוטיוב דרך API (שעובד בנטפרי)@צדיק-תמים רבים חיפשו ורבים יחפשו, מאד מורכב טכנית לעשות כזה דבר
-
עזרה עם בניית תוסף כרום@צדיק-תמים עם האובייקט
chrome.extension.sendMessageומאזינים להודעות עם אובייקט
chrome.extension.onMessage.addListenerחפש בגוגל chrome extension send message between popup and page
-
עזרה עם בניית תוסף כרום@צדיק-תמים לא הבנתי את שאלתך
-
עזרה עם בניית תוסף כרום@ivrtikshoret
לתוספי כרום יש שני חלקים, יש דף רקע שזה הפופאפ, ויש קוד שמוזרק לתוך הדף, הקוד שמוזרק לדף יכול להיות מוזרק רק בטעינת הדף ולא מאוחר יותר, והקוד שבפופאפ לא יכול להשפיע ישירות על הדף, אבל אפשר לשלוח הודעות מהפופאפ לדף ומהדף לפופאפ
אז אתה צריך לעשות שני דברים - קודם כל להזריק קוד לדף שיאזין להודעות מהפופאפ, וכשיקבל הודעה שהמשתמש רוצה לצבוע את הדף בצבע מסוים אז הוא יבצע את זה. ודבר שני לבנות את הפופאפ עם אפשרות בחירת צבעים ושליחת הודעות לדף.
תתחיל ותודיע איפה נתקעת -
Sequelize מיון לפי נתוני טבלה אחרתיש לי טבלה של כרטיסים Tickets, וטבלה של לוגים Log
כל פעם שמשתמש פותח כרטיס, זה נרשם ללוג.
אני רוצה לחפש את הכרטיסים שלא פתחו אותם בכלל, או שפתחו הכי קצת, בשאילתה Mysql הייתי כותב כך:SELECT *, ( SELECT COUNT(*) FROM Log WHERE Log.TicketId = Tickets.ID ) AS openCount FROM Tickets ORDER BY openCount;השאלה איך אני עושה את זה בSequelize, יש לי ענין מיוחד לעשות את זה דוקא שם בגלל תנאים מורכבים שכבר בנויים בו.
הכיוון שניסיתי הוא בערך כך:TicketsModel.findAll({ include: [ { model: Log, as: 'Log', attributes: [ [Sequelize.fn('COUNT'), 'openCount'] ] } ], order: ['openCount'] })אבל זה כמובן לא תקין, לא מצאתי תיעוד איך אפשר לעשות תת שאילתה בתוך השאילתה הראשית.
האם זה אפשרי? -
עזרה - שרשור פרומיסים מותנה וביצוע פעולה רק בסיום כולם (JS)@צדיק-תמים אם אתה ממש מתעקש, אפשר לשפר את הפונקציה, כי היא עושה בעצם כמה דברים, וכלל נקוט בידינו שאין פונקציה אחת עושה שני שליחויות
אתה יכול להפריד את זה לפונקציה אחת שתהיה אחראית לבניה של ה URL, ופונקציה נוספת שתשלח את הבקשה לשרת. -
עזרה - שרשור פרומיסים מותנה וביצוע פעולה רק בסיום כולם (JS)@צדיק-תמים זה מעולה, זה בכלל לא טריק, אתה חייב להצהיר על המשתנה nextPageToken שיהיה זמין לכל הפונקציה בשביל האיטרציה הבאה של הלולאה
מה שכן, אתה לא חייב לאתחל אותו כמחרוזת ריקה, אלא להשאיר אותו מוצהר, התוצאה תהיה אותה תוצאה.
בקוד הישן שלך זה היה טריק כי רצית להשתמש עם האובייקט שמתקבל כתשובה מהשרת, שהוא מכיל את הטוקן של הדף הבא, אז עשית אוביקט דמה שמכיל רק את הטוקן, וזה לא תקין, אבל עכשיו עשית מתשנה מיוחד בשביל הטוקן וזה מצוין. -
עזרה - שרשור פרומיסים מותנה וביצוע פעולה רק בסיום כולם (JS)@צדיק-תמים לא הבנתי לאיזה טריקים התכוונת
(בשורה 15 כנראה התכוונת לif (nextPageToken) -
עזרה - שרשור פרומיסים מותנה וביצוע פעולה רק בסיום כולם (JS)@צדיק-תמים ברור וקריא מאד
רק בקטנה, השם של המשתנה שבונה את ה URL לא אמור להיות GET_INFO_FOR_VIDEO_ID, כי זה לא פונקציה שמחזירה ערך, זה סה"כ URL חביב, צריך לקרוא לו כפשוטו url
ועוד משהו קטן, אין צורך לפצל את שורות 12 ו 13, זה יכול להיות פקודה אחת, כי אתה לא משתמש בפרומיס שמוחזר בשורה 12 אלא רק לצורך חילוץ הגייסון, אז זה יכול להיות כךconst infoVideo_Object = await fetch(GET_INFO_FOR_VIDEO_ID).then(res => res.json()) -
עזרה - שרשור פרומיסים מותנה וביצוע פעולה רק בסיום כולם (JS)@צדיק-תמים אמר בעזרה - שרשור פרומיסים מותנה וביצוע פעולה רק בסיום כולם (JS):
אשמח להרחבה
תראה לדוגמא את הקוד הזה
const url = new URL('https://www.googleapis.com/youtube/v3/search'); url.searchParams.append('channelId', channelId); if (nextPageToken) url.searchParams.append('pageToken', nextPageToken); console.log(url.toString());שרשור מחרוזות זה לא דבר קל, ובפרט אם תרצה אחר כך לתחזק את זה (להוסיף תוכן למחרוזת, לשנות תנאים וכדומה) זה הופך להיות סיוט.
במקום זה אתה שולט על ה URL עם קוד טהור, מוסיף פרמטרים עם המתודה append, ובסוף אתה מדפיס את התוצאה עם toString@צדיק-תמים אמר בעזרה - שרשור פרומיסים מותנה וביצוע פעולה רק בסיום כולם (JS):
ובכלל הייתי שמח להעמיק קצת יותר בכל העניין של כתיבה נכונה של קוד
הבסיס הוא כפי שכתב שעייה, תחשוב איך אדם אחר יבין את הקוד שלך (או אתה עצמך עוד חצי שנה), הקוד אמור להסביר את עצמו, שכל מתכנת יבין מה התפקיד של המשתנה הזה ולמה אתה קורא עכשיו לפונקציה הזו ומה אתה מצפה ממנה להחזיר, לכן חשוב להקפיד על שמוות משתנים ברורים, לייחד לכל פונקציה שם ברור ומטרה ברורה, לא לחסוך בקוד על חשבון הקריאות, גם אם נדמה לך שזה יעיל יותר וקצר יותר.
לדוגמא מה זה הפונקציה בשם "לולאה", לא ברור מה המטרה שלה, צריך לקרוא לה שם שיבהיר שהיא מקבלת מידע על הערוץכדאי מאד גם להצמד לתקנים אוניברסליים, לדוגמא פונקציה שמחזירה ערך אמורה להתחיל ב get, כמו getToken ופונקציה שאמורה להגדיר ערך אמורה להתחיל ב set, מחלקה מתחילה באות גדולה, פונקציה מתחילה באות קטנה, כל הדברים האלה עוזרים להבנת הקוד