عناصر تحكم متعددة على صفحة مع مثيلات متعددة من جافا سكريبت
-
25-09-2019 - |
سؤال
لقد قمت بإنشاء عنصر تحكم على الويب في ASP لاستخدامه في الاندماج مع Telligent CommunityServer. يتم كتابة التحكم في ASP مع حوالي 10 أسطر من الخلفية C# للتحكم في رؤية عناصر واجهة المستخدم بناءً على الأذونات ، لكنني أقول إن 90 ٪ من الوظائف هي جافا سكريبت مباشرة.
يعمل عنصر التحكم بشكل جميل ، حتى تسقط حالتين من عنصر التحكم على نفس الصفحة-إلى ما يشيرون إلى نفس وظائف JavaScript بالضبط ، يعمل عنصر تحكم واحد فقط.
كيف يمكنني اتخاذ هذه الوظيفة التي أمتلكها ، هذه السطر 1200 من JavaScript ، وصنعها حتى يتمكن كل مثيل من عنصر التحكم من الإشارة إلى كل مثيل فريد من JavaScript؟
المحلول
إذا كانت المشكلة هي ببساطة معرفة عنصر HTML الذي أثار حدثًا ، فهذا أمر سهل - يتم تمريره إليك في حجج الحدث. (يمكنك بعد ذلك الحصول على العنصر الأصل ، بالطبع). لذا ، إذا فهمت المشكلة بشكل صحيح ، فلديك وظائف JavaScript تشير إلى بعض عناصر التحكم ، والتي يتم تكرارها؟
لا أعتقد أن هناك أي حل سحري هنا: عليك فقط جعل المعرفات فريدة من نوعها. إذا كنت لا تستخدم عناصر تحكم من جانب الخادم (والتي تتعامل مع هذا لك تلقائيًا) ، فيمكنك استخدام بعض البادئة أو لاحقة من جانب الخادم ، على سبيل المثال.
<input id="<%= ParentControlId %>_mytextbox" type="text" />
أين ParentControlId
هو معرف فريد من عنصر التحكم الأصل (يمكنك فقط استخدام Control.id إذا كنت لا تمانع في معرفات طويلة).
بالطبع ، يجب أن تحاول إعادة استخدام وظائف JavaScript بدلاً من تكرارها لكل مثيل تحكم. إذا كنت تستخدم نهج المعرف الذي تم إنشاؤه بواسطة الخادم ، فسوف يتعين عليك تمرير معرفات كاملة. إذا كنت تستخدم نهج البادئة ، يمكنك فقط المرور حول البادئة.
نصائح أخرى
كيف يتم إدخال جهاز التحكم الخاص بك في الصفحة في الصفحة ، إذن؟ حقنها مباشرة؟ هل تستخدم ScripTreference؟ سيقوم المتصفح بتحميل JS مرة واحدة فقط إذا أشار كلا عناصر التحكم إلى نفس JS (عنوان URL نفسه).
أيضا ، هل مكتوبة JS الخاص بك من حيث أي حالة قديمة؟ على سبيل المثال ، هل لديك وظيفة مثل Load (OcontrolName) أو هل تحتوي وظيفة LOAD () على اسم مثيل مزود بداخله؟
IMO ، إن محاولة الحصول على "JavaScripts" المتعددة ليست هي الطريق إلى الأمام - قد يحصل إعادة بناء الكود الخاص بك على إجابتك بشكل أسرع.