RegisterArrayDeclaration unexpected behavior

22 בספטמבר 2008

תגיות: ,
אין תגובות

למי שלא מכיר עדיין ClientScript.RegisterArrayDeclaration מיועדת להוספת מערך javascript אל הדף + ערך.
זו פונקציה נחמדה שבודקת אם המערך כבר קיים על הדף, ואם כן, רק מוסיפה את הערך.
אני משתמש בה בעיקר ב custom controls.

תוך כדי פיתוח של control, עלתה הדרישה לעיתים לאתחל את המערך ללא איברים, כדי שיאותחל לאחר מכן ע"י javascript (על הסיבה לכך בהזדמנות אחרת),
זו לא היתה בעיה כל אחת מהשורות הבאות תייצר את המערך SomeJSarr ריק על הדף:

this.Page.ClientScript.RegisterArrayDeclaration("SomeJSarr", null);
this.Page.ClientScript.RegisterArrayDeclaration("SomeJSarr", "");

הבעיה/התנהגות מרגיזה מתרחשת כשרוצים לטעום משני העולמות:
control אחד שרק יאתחל את המערך, ו control אחר שיבצע רישום לערך,
נשמע טריויאלי לא? משהו שמקביל  לכתיבת שתי השורות הבאות הבא:

this.Page.ClientScript.RegisterArrayDeclaration("SomeJSarr", "");
this.Page.ClientScript.RegisterArrayDeclaration("SomeJSarr", "'firstValue'");

השורה הראשונה מוסיפה את המערך הריק,
והשורה השניה לא מבצעת רישום של מערך חדש,
אבל גם לא מוסיפה את הערך החדש כמו שצריך, וגורמת לשגיאת סקריפט מכוערת:

var AS_controlsArr = new Array(, 'firstValue');

פשוט שכחו לבדוק את המקרה שבו המערך מאותחל אבל ללא איברים, ולכן תמיד הוספת איבר גוררת ',' לפניו.

מה הפתרון?
התיעוד לא ממש עוזר בעניין,
פשוט נמנעתי מאתחול ריק של המערך בצורה הזו, ואם צריך, אז האתחול מתבצע ע"י javascript במידה והמערך לא קיים עדיין ( נקודה למחשבה בעניין – פחות יעיל לחפש משתנה שלא קיים כשהדף עולה ב context הגלובלי, כיוון שאז עוברים על כל ה context).

אשמח לשמוע הערות/הארות, ושיהיה יום נפלא

הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *