הנדסה אזרחית & הנדסה מבנית
יצירת מנהל ספר עם אחסון מקומי
Table of Contents
הבנת היסודות
(הופנה מהדף ג'אווה ו- Web Storage API הוא פרויקט מצוין עבור שליטה במושגים בסיסיים לפני פסגה, יישום חייב להתמודד עם שלושה פעולות עיקריות:0GalFLT:1, FLT:2readFLT 3, ו-FLT:4deleteFLT:5 - דפוס CRUD קלאסי, מינוס עבור חיי היום.
לפני כתיבת קו קוד בודד, לחזק את ההבנה של העמודים הבאים:
- (ב) מזמורים (ב"א): "ה'' (ב')'''' (ב')'''''''''''''''''''''')''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- (ב) ,0) ,4 (ב) ,החנות בעלת ערך מפתח זה שומרת על נתונים גם לאחר סגירת הדפדפן.
- (ב) ,0) ,5 ,5 ,2 , ; מחיקת כפתורים אש FLT 3: אירועים.
- (ב) ,5 ,5 ,5 , ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
בניית מנהל הסימון Core
מבנה HTML
התחל עם skeleton HTML מינימלי, סמנטי.הצורה אוספת את שם הספר ואת כתובת האתר; רשימה לא מסודרת הופכת את סימני הספר המאוחסנים.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Bookmark Manager</title>
</head>
<body>
<h1>My Bookmarks</h1>
<form id="bookmarkForm">
<label for="name">Name</label>
<input type="text" id="name" required />
<label for="url">URL</label>
<input type="url" id="url" required />
<button type="submit">Add Bookmark</button>
</form>
<ul id="bookmarkList"></ul>
<script src="app.js" defer></script>
</body>
</html>
(ה) , ויקרא י"ד, ויקרא י"ד, ויקרא י"ד, ויקרא י"ד, ב): "ה'וְהִנָּעָה אִם נָעָשָׂה אִם עַכְתָּתְתָּעָשָׂעָעָעָעָעָעָעָתְתְתְתְתְתָּעָעָעָעָעָעָעָעָעָעָעָעָעָעָעָעָם"ל אִתָּעָבְתָּעָעָעָעָם" (בְתְתָּעָעָשׂרָאוּ"ל אִתָּעָעָבְתָּעָעָעָעָעָעָעָעָעָעָעָשׂרָאוּ"אֶתְתָּעָעָעָעָעָעָעָעָעָעָעָעָשׂרָאוּ" (בְתָּ
סטלינג עבור שימושיות (Optional but המומלצת)
בעוד CSS אינו המוקד, ממשק נקי משפר את חוויית המשתמש.הוספת גליון פשוט לחלל את הטופס, לתת כפתורים מראה עקבי, וסטייל את פריטי רשימת הסימון עם אפקטים מרחפים. מינימאל inline סטיילling יכול גם להיות מוזרק באמצעות JavaScript, אבל בנפרד FLT:11 הוא המועדף על שמירה על יכולת.
<!-- inside <head> -->
<link rel="stylesheet" href="style.css" />
ב-FLT:13, השתמש ב-flexbox עבור הפריסה הטופס, רוחב מקסימלי עבור מיכל, משוב חזותי ייחודי עבור למחוק כפתורים כדי למנוע קליקים מקריים.
לוגיקה של JavaScript - הלב של היישום
כל ההתעקשות והאינטראקציה חיה ב-FLT:14 והסעיפים הבאים שוברים כל תפקיד.
מידע ראשוני
אנו זקוקים למשתנה מרכזי המחזיק את רשימת ההערות הנוכחיות, יש להתחיל ב-FLT:15 או ליפול חזרה למערך ריק.
let bookmarks = [];
function loadBookmarks() {
const stored = localStorage.getItem('bookmarks');
if (stored) {
bookmarks = JSON.parse(stored);
} else {
bookmarks = [];
}
}
function saveBookmarks() {
localStorage.setItem('bookmarks', JSON.stringify(bookmarks));
}
loadBookmarks();
הפונקציה LT:17 נקראה בכל פעם שהמערך משתנה - לאחר הוספת, עריכה או מחיקת סימן ספר.זה מבטיח את האחסון הוא תמיד מסונכרן עם מערך in-memory.
הצגת סימניות
נדרום רשימת הסימון פירושו להזדקק למערך 18FLT וליצור פריטים עם תג עוגן ולחיצת כפתור.
function renderBookmarks() {
const list = document.getElementById('bookmarkList');
list.innerHTML = ''; // clear existing entries
bookmarks.forEach(function(bookmark, index) {
const li = document.createElement('li');
li.dataset.index = index;
const link = document.createElement('a');
link.href = bookmark.url;
link.textContent = bookmark.name;
link.target = '_blank';
link.rel = 'noopener noreferrer';
const deleteBtn = document.createElement('button');
deleteBtn.textContent = 'Delete';
deleteBtn.addEventListener('click', function() {
deleteBookmark(index);
});
li.appendChild(link);
li.appendChild(deleteBtn);
list.appendChild(li);
});
}
השימוש ב-FLT:20 במקום פנימיHTML נמנע מפגיעות של XSS כאשר שמות סימניות מכילים HTML.מחוייב משתמש בסגר כדי ללכוד את מדד הסימון.
הוספת סימן ספר
הקשב לאירוע של טופס (FLT:21), למנוע את ההנפקה של דף ברירת המחדל, ליצור אובייקט סימן, לדחוף אותו למערך, להתמיד ולחדש.
document.getElementById('bookmarkForm').addEventListener('submit', function(e) {
e.preventDefault();
const nameInput = document.getElementById('name');
const urlInput = document.getElementById('url');
const newBookmark = {
name: nameInput.value.trim(),
url: urlInput.value.trim()
};
// Basic validation: ensure URL starts with http/https
if (!newBookmark.url.startsWith('http://') && !newBookmark.url.startsWith('https://')) {
newBookmark.url = 'https://' + newBookmark.url;
}
bookmarks.push(newBookmark);
saveBookmarks();
renderBookmarks();
// Reset form
nameInput.value = '';
urlInput.value = '';
nameInput.focus();
});
גישה זו היא פשוטה: עבור ייצור, ייתכן שתרצה לאמת את פורמט ה-URL באמצעות בנייתו של ה-FLT:23 או regex.
מחיקת סימן ספר
Deletion מסיר את הפריט באינדקס נתון ועדכונים אחסון ואת DOM.
function deleteBookmark(index) {
bookmarks.splice(index, 1);
saveBookmarks();
renderBookmarks();
}
(ב) אם אתה מעדיף את חוסר יכולת, אתה יכול להשתמש בפרוטוקולים של LT:26 ו reassignFLT:27, אבל עבור פרויקט קטן כמו זה, FLT:28 הוא ברור ומבצע.
עידוד הבקשה
לאחר שה-CRUD הבסיסי עובד, שקול את השיפורים האלה כדי להפוך אבטיפוס לכלי חזק.
Editing Bookmarks
להחליף את השם סטטי / קישור עם מצב עריכה inline.כאשר המשתמש לוחץ על כפתור עריכה, להחליף את תג העוגן עם שדות קלט מלא לפני הערכים הנוכחיים.על לחסוך, לעדכן את המערך והמשמדה.
⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
דיגיטציה עם התגים
הוסף נכס אופציונלי:30 (הנכס לכל אובייקט סימן (למשל, FLT:31) ולאחר מכן להרחיב את UI עם מסנן המסתיר פריטים רשימה אשר תגים שלהם לא מתאימים.
יבוא ויצוא
(הופנה מהדף) ניתן למשתמשים לגבות או להעביר סימני ספר (או קובץ להורדה) ל-JSON ולעבור את ה-JSON, להשתמש בהורדה באמצעות FLT:34 ו-FLT:35 ייבוא קורא את JSON וממזג עם סימני ספר קיימים.
function exportBookmarks() {
const data = JSON.stringify(bookmarks, null, 2);
const blob = new Blob([data], { type: 'application/json' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = 'bookmarks.json';
a.click();
URL.revokeObjectURL(url);
}
חיפוש ופילטר
הוסף קלט מעל רשימת הסימון.על כל אירוע FLT:37, מסנן את מערך ה-FLT:38 על ידי שם (או כתובת URL) ולקרוא גרסה של FLT:39 המציג רק את המשחקים.
בדיקות ודפדפן Compatibility
לסקירה מקומית יש תמיכה בכל הדפדפנים המודרניים, אך גרסאות ישנות יותר של Internet Explorer (IE 8+) היו ממשק API אחר.If you must Support Legacyסביבות, test with Polyfills or Fall Back to Cookies. Today's FLT:0Chrome, Firefox, Safari, EdgeveFLT:1 (הן Chromium ו- Legacy) מטפלות בעוגיות.
כאשר בדיקות, בדוק:
- הנתונים שרדו את דפי הרענון והדפדפן מחדש.
- קביעת סימן ספר מעדכן הן את UI והן את האחסון.
- דמויות מיוחדות בשמות סימן ( ⁇ , ampersands) ניתנות נכון.
- כתובת: ללא קונסולת:42
(ב) ,0) כלי עזר (ב) ; שימוש בבקשה וגילט; אחסון מקומי כדי לבדוק את הנתונים נשמרים באופן ידני.FLT:2 לבדיקה אוטומטית, לשקול שימוש ב-FLT 3CypressigtureFLT:4 או FLT:5 PlaywrightFLT:6 כדי לדמות את זרימת המשתמשים - למלא טופס, להוסיף ולמחוק, לנסח את הרשימה הנמשכת - 5.
מסקנה
הפרויקט הזה מדגים כיצד כמה עשרות שורות של ונדל"ן יכול ליצור יישום אינטרנט פונקציונלי לחלוטין, מתמשך.למדת לרתום את ה-FLT:0localStorage APIsFLT:1 עבור עקשנות נתונים, (FLT:2event ExpeditioneursFLT 3: for יעילה UI עדכונים, ו-FLT:4CRUD פעולות LT5 ללא מסגרת אחורית, החלת, או ניהול מוקדם של המדינה, הוא החל מתפקודים, או מ-Repleating, החל מ-re-Review מודרני, ו-Reverse, ו-V-Reverse, ו-Review, ו-Reverse, ו-Reducing, , ו-Remedating, , , , , , , , .
(ה) להעמיק את ההבנה שלך, לחקור את תיעוד ה-FLT:0.MDN על ניהול המדינה המקומי (הופנה מהדף 1) ולקרוא על FLT:2 אפילו טיפול ב- DOMFLT 3: עבור ניהול מתקדם יותר, חפש את ה-FLT:4 IndexedDBFLT:5 עבור נתונים גדולים יותר או FLT6 עובדי LT 7 עבור חוויות לא מקוון יכול עכשיו להרחיב את הספר שלך עם בסיס אישי.