1925
צפיות
צפיות
52
תשובות
תשובות
וובאפדייט מספר 3
גיליון
תגובות לגיליון יש לשרשר לשירשור זה.
בהזדמנות זו אנחנו רוצים להודות לאוריקס על העבודה הניפלאה בריכוז וכתיבת החומרים למגזין וובאפדייט
תהנו
גיליון
תגובות לגיליון יש לשרשר לשירשור זה.
בהזדמנות זו אנחנו רוצים להודות לאוריקס על העבודה הניפלאה בריכוז וכתיבת החומרים למגזין וובאפדייט
תהנו
52 תשובות
בקשר לאתגר ה-css.
לא אמור להיות לו מבנה html בסיסי?
או שאני מבלבל בין שני אתגרים שונים?
אתה מבלבל
כנראה הצעתי לא התקבלה או שבכלל לא הגיעה אליהם
הפתרון לאתגר
זה גם היה כתוב בגיליון
אופס HTML ניסיתי לעלות |חבול|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml_lang="he" >
<head>
<title> New Document </title>
<meta name="Author" content="" />
<meta name="Keywords" content="" />
<meta name="Description" content="" />
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=windows-1255" />
<style type="text/css">
div{width:500px;height:500px;border:1px solid black;}
div.d1{line-height:500px;}
div.d2 span{vertical-align:middle;}
</style>
</head>
<body>
<div class="d1">
My Name Is Nir Tayeb
</div>
</body>
</html>
הגיליון הגיע אליי ב-GMAIL
עם ג'יבריש וכל ניסיון לשנות קידוד לא עזר
קבל ח"ח על ההתמצאות בגוגל
זה גם התשובה הראשונה שאני מצאתי
עכשיו תמרכז את הטקסט למטה (באותו קלאס)
שכחתי להחליף יוזר
וכמובן – תכניס יותר משורת טקסט אחת שם.
אתה צריך לדמות valign באופן מלא.
אפשר בדרך אחרת
לשנות את הסטייל:
<style type="text/css">
div{width:500px;height:500px;border:1px solid black;position:relative;}
div.d1 span{position:absolute;bottom:25%;top:25%;}
</style>
הנה
זה היה כתוב בגיליון
אוריקס – לא הבנתי למה
דרסת את קונסטרוקטור ברירת המחדל ויצרת אחד שהוא בדיוק כמוהו (שכידוע לך ברגע שיוצרים בנאי משלך אז בנאי ברירת המחדל חדל לתהקיים ),
זה יכול ליצור בעיות לאלו שמשתמשים בו, הרבה יותר נכון (לדעתי) זה לחייב נתינת Command בקונסטרוקטור (כלומר אין יותר בנאים אחרים חוץ מזה שמקבל את קומנד)
ולאפשר את ה-property שיצרת עבור אובייקט הקומנד.
לפי ההיגיון למה ליצור אובייקט אם לא צריך אותו באותו רגע ?!
אשמח אם תסביר לי
בשביל לתת לך קצת יותר כיוון
הפתרון הוא CSS1. תשכח מ BOX MODEL
….
יצרתי קונסטרקטור ברירת מחדל בדיוק מהסיבה שאתה ציינת – פשוט כי אני לא רציתי שלא יוכלו להשתמש בו.
*אף פעם* אל תיצור אובייקט בלי קונסטרקטור ברירת המחדל – פשוט לא עושים את זה. שים לב שתמיד לאובייקטים המובנים שאתה יוצר של בשפה איתה אתה עובד (אם זה C# או ג'אווה) יש קונסטרקטור ברירת מחדל. תמיד. אסור לך להגביל את המשתמשים שלך – הקלאס צריך לעבוד תמיד, אחרת אין טעם בזה שאתה כותב קוד בשביל מישהו אחר, פשוט תכתוב אותו בעצמך.
יש גם מקרים שבהם יש רק קונסטרקטור ברירת מחדל (ראה מקרה LABEL בפורום דוט נט).
חוצמזה
הפתרון שלך לא יעבוד תמיד. הרעיון הוא שזה לא צריך להיות תלוי בכל סוג של positioning שהוא.
ותוריד את ה standart mode, הפתרון עובד בלעדיו
כמו שכבר אמנו – CSS 1.
גם ב-CSS 1 יש בוקס מודל
רק בלי positions
קטנוני…
הכי קרוב שאני מצליח עד עכשיו
אני אולי מ-10 מחפש בגוגל אחר פתרונות ולא מצליח למצוא משהו שמתאים ל-CSS1. זה הדבר היחידי שהצלחתי לעשות לבד :-/
העברת data ל browser ע"י סקריפט
אין לי ספק שאם באפליקציית הסרבר יוצרים קוד JS שיכיל את הנתונים – העניינים ירוצו יותר מהר (אצל הלקוח). אבל יש לי מספר הערות/הסתייגויות משיטה זו ובמיוחד כפי שהוצגה במאמר:
1. שימוש ב delimiter עצמו בנתונים עלול להרוס את כל הסיפור. אם אחד הערכים מכיל למשל את הסימן ; אז אנחנו בבעיה.
פתרון 1 – להשתמש ב delimiter _ממש_ נדיר. ולמרות זאת – לא ממליץ כטכניקה מספיק רצינית.
פתרון 2 – המרת תוי ה delimiter (בשרת) למשהו אחר (כמו שניתן לרשום ב HTML את התוים <> ע"י קוד מיוחד).
פתרון 3 – המרת כל ערך ל base64 ואז _בטוח_ שאין בו תוים כמו ";", "^" וכד'.
שימו לב שפתרונות 2 ו 3 הם עדיין דורשים תכנות נוסף – ובשיטת ה XML אין צורך לבצע שום דבר.
2. בשיטת XML בחרתם להשתמש ב ActiveXObject – שניתן להשתמש בו בעיקר (אם לא רק) ב MSIE. אם ככה – אז למה לא עד הסוף? באקספלורר יש VBScript, ושם אפשר לעבור על ה XML בלולאת For Each (אם אני זוכר נכון), שנחשבת יעילה יותר מלולאת For רגילה (לפחות ככה זה ב VB6).
בסופו של דבר – המסר העיקרי שלי הוא: כן, עבודה עם XML נעשית בצורה איטית (יחסית), אבל היתרונות של XML רבים מאוד, ומאפשרים לבנות אפליקציה בצורה שניתן לתחזק אותה ולשנות אותה הרבה יותר טוב.
עמוד הבית של ווב אפדייט
עצה ידידותית
תוריד topstyle, תגביל אותו ל CSS1 ותתחיל לשבור את הראש… גם אני צריך למצוא לזה זמן, אבל אין לי :-/
סליחה?
אתה ממש לא חייב לדרוס את הconstructor שלך גם אם אין לך מה להכניס.
אתה פשוט תירש את הconstuctor של מחלקת האב שלך..
(אני לא רואה שום בעיה עם זה…)
לא הבנתי אותך בכלל.
המממ
שים לב, במאמר לא מדובר על הבעייה שהצגת אלא רק על השיטה עצמה.
אתה בהחלט צודק שהבעייה קיימת וכמו שאתה ציינת אפשר גם להתמודד איתה.
בנוסף, יש לי כמה הסתייגויות ממה שכתבת:
1. גם ב JS יש לולאה דומה, קוראים לה for…in
2. עבודה עם VBS היא תמיד לא מומלצת, דובר על זה רבות בפורומים השונים. זאת שפה שנופלת מ JS כמעט בכל פרמטר. תוכל לחפש מידע בפורום ASP בתפוז אם תרצה.
3. ניתן בלי מאמצים רבים מידי להתאים את זה גם למוזילה, כל מה שצריך זה קצת browser detecting ויצירה קצת שונה של האובייקט.
4. XML לא פותר את הבעייה שהצגת. אני מפנה אותך , זהו קלאס שיוצר XML מהרקורסט. עכשיו, אם אחד השדות מכיל משהו כזה:
</record>text
אותה בעייה בדיוק קיימת, כשנעביר את ה XML ללקוח.
בקיצור, דעתי היא שאחרי שכתבת את המודול שעושה את ההחלפות האילו, אין שום סיבה לא להשתמש בהעברה ללקוח בצורת מערכים.
קונסטרוקטור ברירת המחדל
לא נורש משום מקום (להבנתי, גם לא מ-Object) הוא נוצר אוטומטית עם יצירת המחלקה במידה ואין שום בנאי אחר למחלקה, במידה ויצרת בנאי משלך למחלקה, בנאי ברירת המחדל מושמד.
הצלחתי
הקובץ
לגבי הערה 4
אתה בטוח בזה?
עד כמה שאני זוכר, העבודה עם האובייקטים של ה XML מבטיחה שגם תוים "אסורים" כמו ">" מקודדים כך שהם לא מפריעים לפענוח של ה XML עצמו.
ועוד שאלת OOP
מחלקה אמורה לייצג מבנה לוגי ולא לייצג פעולה מסויימת (כמו ש-JLabel לא כותבת על המסך אלא מייצגת תווית). אז למה בחרת כאן להשתמש ביצירת אובייקט של מחלקה במקום לעשות את המתודה סטטית (static) ולקרוא לה בעת הצורך ?
אם תסתכל על המחלקה Convert של .NET אתה תראה שהמתודות של ההמרה toInt31 ודומיו (ומצטער אם כתבתי את לא נכון ) הם סטטיות כי המחלקה לא אמורה לייצג שום דבר ולכן יש את הצורך להשתמש במחלקה כדי לאגד (encapsulate) את המתודות שצריך תחת גוף אחד.
איני יודע בוודאות אם כתבתי נכון אבל אני מקווה שהרעיון מובן
using System;
using System.Data;
using System.Data.OleDb;
using System.Text;
namespace DataHandler
{
public class TransferToClient
{
public static string GetString(OleDbCommand oCmd)
{
OleDbCommand oCommand = oCmd;
StringBuilder oSB;
OleDbDataReader oReader = oCommand.ExecuteReader();
oSB = new StringBuilder();
oSB.Append('[');
while (oReader.Read())
{
oSB.Append('[');
for (int j = 0; j < oReader.FieldCount; j++)
{
oSB.Append(""" + oReader.GetValue(j) + "",");
}
oSB.Remove(oSB.Length – 1, 1);
oSB.Append("],");
}
oSB.Remove(oSB.Length – 1, 1);
oSB.Append(']');
return oSB.ToString();
}
}
}
אני אשמח לשמוע את דעתך
באחוזים
תיקון
Event Handler Class For JS…
אני הוספתי אצלי מתודה שבאפליקציות DHTML נעזרים בה בדר"כ (במיוחד כאשר עובדים עם Positions של CSS)
התכונה pageX שעובדת במוזילה וב-IE צריך ליצור אותה ע"י clientX+scrollLeft (וכנ"ל ל-pageY)
eventHandler.getDocPosition = function(e, coord){
coord = (""+coord).toLowerCase();
if("x"==coord){
return e.pageX?e.pageX:e.clientX+document.body.scrollLeft;
}else if("y"===coord){
return e.pageY?e.pageY:e.clientY+document.body.scrollLeft;
}else{
return false;
}
}
כמו כן הוספתי מתודה שתפקידה להסיר אירוע :
eventHandler.removeEvent = function(oElement,sEventName,funRef){
// Add by Nir Tayeb:
if(eventHandler.iBrowser === 1){
oElemen.detachEvent(type, funRef);
}else{
oElement.removeEventListener((""+sEventName).substring(2,sEventName.length),funRef,true);
}
}
כי אתה מפספס את הרעיון…
קודם כל, אין טעם כ"כ ביצירת מחלקה עם שיטות סטטיות אם אתה קורא לזה רק פעם אחת בעמוד (וכאן ברור שקוראים למחלקה הזאת רק פעם אחת בעמוד…).
דבר שני, לשיטה סטטית, כידוע לך, אין גישה ל members הפנימיים של המחלקה (אלא אם כן הם סטטיים בעצמם) ואז אתה יוצר מצב שה OleDbCommand לא יכול להיות תכונה וזה מצב לא רצוי. זה בערך על אותו משקל של ההצעה שלך לא לאפשר לאתחל מחלקה עם ה default constructor שלה… זה לא בריא ולא נהוג. שוב, אין לך שום רצון להגביל את המשתמשים שלך .
השיטה ToInt שהצגת סטטית כי אין לה קשר למופע ספציפי של המחלקה (כלומר int מסויים). דבר כזה יהיה לא לוגי בכלל:
int x;
int y = x.Parse(x);
לעומת זאת דבר כזה יהיה הרבה יותר נכון:
int x;
int y = int.Parse(x);
במקרה שלי אין את הבעייה הזאת, ואני כן רוצה להשתמש בתכונות פנימיות.
אולי
אבל לקליינט ה XML מועבר כסטרינג.
אתעמק מאוחר יותר…
הכוונה שלי היא…
הכוונה שלי היא שה XML שמועבר לקליינט "מקודד היטב". לדוגמה:
אם ברשומה מסויימת יש את הערך:
</record>my value
אז בפועל ההמרה לסטרינג תהיה:
</record>my value
ואז הסטרינג שעובר לקליינט מפוענח היטב ע"י מנוע ה XML של הקליינט.
כלומר, אין צורך ב delimiter בדרך הזו, ה structure נובע ישירות מה XML.
יכול להיות שאני לא ברור, ועלי להודות גם שלא בדקתי עד הסוף את הדברים שאני אומר, אבל אני די בטוח שככה זה עובד (יפתיע אותי אם לא).
אשמח לשמוע תגובתך בעניין. כמובן – גם כל האחרים מוזמנים להגיב
נדפק קלות…
צריך להיות:
אז בפועל ההמרה לסטרינג תהיה:
[Ampersand]lt[semi-colon]/record[Ampersand]gt[semi-colon]my value
ניר,
מהקובץ שצרפת נראה שלא ממש הבנת את האתגר. קודם כל, לא מדובר על VALIGN שהוא TOP, MIDDLE או BUTTOM, אלא על VALIGN באחוזים. כלומר, אני יכול לתת לו למשל 30%.
דבר שני, הפתרון שלך לא עובד תמיד. אתה צריך להגיע למצב שללא תלות בגודל אלמנט האב וללא תלות בגודל האלמנט שאתה רוצה לעשות לו VALIGN זה יעבוד. אם אני אשנה את הגודל של אחת מהקופסאות שצרפת בקובץ זה לא יעבוד. פתרון פרטי זו לא חוכמה למצוא ואת זה אפשר לעשות גם בלי סיבוכים מיותרים… השאלה היא איך אתה מטפל במקרה הכללי.
וכמובן שגם ללא תלות
ב MARGINים, PADDINGים וחבריהם.
אתם בטוחים שזה בכלל אפשרי ?
CSS1 לא נותן לך הרבה אפשרויות,
vertical-align עובד על טקסט ביחס לטקסט שלידו (ועם תמונות)
margin, padding נותנים את הפאשרות למקם אלמנטים/קופסאות/טקסט ביחס לאלמנט האב
מעבר לשלושת תכונות אלו ו-Line-height שלא עוזר ממש ,אין שום דרך אחרת לעשות את הדברים הללו.
לעומת זאת ב-CSS 2 כבר מצאתי מס' אפשרויות יפות למימוש של זה…
טוב שאני אמצא לאתר שוב זמן, אני אעבוד על זה…
אולי …
רוב הסיכויים שזה לא התקבל אבל אם כבר :-/
[קובץ]
ויש גם את זה
וגם את לא נראה לי שתקבלו :-/
אפשרי
זה אתגר קשה אנחנו יודעים
בכל מקרה אין טעם להעלות סתם קבצים, אם יהיה לך פתרון כללי תעלה אותו
לא,
ה XML מועבר לקליינט כסטרינג לכל דבר, גם אם בפועל הוא נוצר באמצעות XML DOM…
זה כמו שאם הייתי יכול להעביר מערך כמערך, כלומר משהו כזה:
<%
var a = [1,2,3];
%>
<script>
var arr = <%=a%>;
</script>
אז אותה בעייה לא הייתה קיימת… הבעייה מתחילה כשזה מועבר כסטרינג טיפש.
אם אתה רוצה עדיין להשתמש בשיטה שלך יש אפשרות ליצור דף ASP שהפלט שלו הוא XML (ולא סטרינג) ואז לעבוד רגיל ובלי תחכומים מיותרים. החסרון הוא שזה יחייב אותך לשתי בקשות.
שים לב רק שבעמוד השני
שהעלתי בסה"כ צריך לשנות את גודל הפונט ואת הגובה של האלמנט שהם יהיו שווים ואז אפשר להתחיל להשתמש ב-Line-height עם אחוזים כך שיהיה אותו אפקט של valign.
כי בעצם line-height מושפע מגודל הפונט.
טוב נראה מה אני עוד יכול לעשות
תגובה
אני מבין שהבעיה מתחילה כאשר רוצים להעביר סטרינג טיפש.
השאלה שלי היתה האם ה XML DOM מצליח ליצור סטרינג שהוא גם טיפש וגם מחוסן בפני תוים בעייתיים, כך שההמרה שלו אח"כ בחזרה XML Document על הקליינט עוברת חלק.
אם כן – אז מה שאמרתי קודם – עדיין תקף: מבנה ה XML עובר אוטומטית עם ההמרה עצמה, ובשיטה השניה יש לעבוד עם delimiter ולהתאמץ קצת עד שמגיעים לתוצאה שקולה.
אם יהיה לי זמן – אני אנסה את זה בעצמי ואשתף את הפורום.
שום דבר לא אמור להיות מושפע משום
דבר. זה אמור לעבוד תמיד, וזה בדיוק הקושי פה
האמת שאתה צודק
המנוע הופך תווים בעיתיים כמו > ו <, ולכן הבעייה לא קיימת. למרות שזה יכול להפוך לבעייתי כשאני כן רוצה את התווים האילו לא בתוך HTML כמו במקרים כאילו למשל:
<input type = "text" value = "כאן בא ערך מה XML">
בכל מקרה אני עדיין חושב שאין שום סיבה לספוג את ה overhead הכרוך ביצירת ה XML הזה ולעבוד בצורה חכמה עם GetString
עדכון אבטחה ל-FireFox
תוקנו מס' בעיות אבטחה ב-FF.