الأفكار على جعل اسم الكائن جافا سكريبت فريدة من نوعها في ASP.Net؟

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

سؤال

ولقد خلق عنصر تحكم المستخدم ASP.Net من شأنها أن الحصول على وضعها أكثر من مرة واحدة داخل صفحة الويب. في هذه السيطرة لقد تعريف الكائن جافا سكريبت مثل:

function MyObject( options )
{
  this.x = options.x;
}

MyObject.prototype.someFunction=function someFunctionF()
{
  return this.x + 1;
}

في التعليمات البرمجية خلف لقد خلق MyObject في برنامج نصي بدء التشغيل -

var opts = { x: 99 };

var myObject = new MyObject( opts );

وعندما يتم الضغط على زر معين في السيطرة فإنه سيتم استدعاء myObject.someFunction (). الآن دعونا نقول ان قيمة x يكون 99 للسيطرة على واحد ولكن 98 لعنصر تحكم آخر. المشكلة هنا هي أن myObject فار سوف تتكرر وإلا المثال الأخير سوف يهم. بالتأكيد هناك طريقة لجعل فار myObject فريدة باستخدام بعض مفهوم لقد لم تعمل عبر حتى الان. أفكار؟

شكرا،

وكريغ

هل كانت مفيدة؟

المحلول

وجافا سكريبت لديك مثل هذا: -

function MyObject(options) { this.x = options.x; }
MyObject.prototype.someFunction = function() { return this.x + 1; }
MyObject.create(id, options) {
    if (!this._instances) this._instances = {};
    return this._instances[id] = new MyObject(options);
}
MyObject.getInstance(id) { return this._instances[id]; }

وبدء التشغيل جافا سكريبت مثل هذا: -

MyObject.create(ClientID, {x: 99});

والرموز الأخرى التي تحتاج إلى استخدام مثيل (ويقول في جانب العميل الحدث onClick)

String.Format("onclick=\"MyObject.getInstance('{0}').someFunction()\", ClientID);

لاحظ تأثير منخفض على العملاء، يضاف فقط معرف MyObject مساحة الاسم العالمي إلى مساحة الاسم العالمي، بغض النظر عن كيفية يتم إضافة حالات كثيرة من التحكم الخاصة بك إلى الصفحة.

نصائح أخرى

إذا كان مجرد قيمة واحدة، لماذا لا يكون وظيفة أعتبر كمعلمة وبناء معالج عند النقر الخاص بك بحيث يضع القيمة الصحيحة في كل عنصر تحكم. إذا كان أكثر تعقيدا من ذلك، ثم النظر في تقديم خيارات مجموعة، ولكل عنصر تحكم، إدراج الخيارات الصحيحة في المكان في مجموعة يتوافق مع كل عنصر تحكم معينة. ثم تمرير مؤشر سليم في مجموعة في وظيفة.

وأفعل ذلك باستخدام ScriptManager.RegisterClientScriptBlock لتسجيل سلسلة ككتلة جافا سكريبت على جانب العميل. أنا يمكن بعد ذلك تعديل سلسلة مخطوطتي استخدام {0}، {1} ..، {ن} أصحاب المكان لحقن هويات اللازمة. ان ذلك يعتمد على هيكل من التعليمات البرمجية الخاصة بك لإذا كان هذا هو الموضة الأكثر أناقة، لكنه يعمل في السؤال. هل يمكن بعد ذلك ضخ أسماء المتغيرات باستخدام إشارات إلى Me.ClientID.

ويمكنك جعل قيمة "س" ثابت والوصول إليه في أي مكان في التعليمات البرمجية، مثل:

function MyObject( options ) { MyObject.x = options.x; }
MyObject.x = 99; // static
MyObject.prototype.someFunction = function () { return MyObject.x + 1; }

وبهذه الطريقة يمكنك الوصول MyObject.x في أي مكان في التعليمات البرمجية الخاصة بك، حتى من دون إعادة instanciating MyObject.

وحل ممتاز أنتوني. وكانت الحلول الأخرى المعروضة جيدة وأنا لم تنظر لهم ولكن كنت تبحث عن شيء أكثر من ذلك بقليل أنيقة مثل هذا الحل. شكرا!

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