عناصر تحكم متعددة على صفحة مع مثيلات متعددة من جافا سكريبت

StackOverflow https://stackoverflow.com/questions/2807074

سؤال

لقد قمت بإنشاء عنصر تحكم على الويب في 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" المتعددة ليست هي الطريق إلى الأمام - قد يحصل إعادة بناء الكود الخاص بك على إجابتك بشكل أسرع.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top