سؤال

لقد بحثت قليلا عن ذلك، ولم أجد أي أسئلة / إجابات تساعدني. المشكلة هي مكالمات دالة مسج الخاصة بي أصبحت كبيرة جدا للحفاظ عليها. أنا أتساءل عما إذا كان ينبغي أن أقوم بإعادة صياغة أكثر بكثير أو إذا كانت هناك طريقة أفضل للقيام بكل هذه المكالمات. سترى كإجراء مكالمة واحدة، والوظائف المجهولة التي هي حجج الوظيفة في نهاية المطاف أن تكون كبيرة جدا وجعل قابلية قراءتها الرهيبة. استطعت النظر في النظرية كل هذه في وظائفها الخاصة، لكنني لا أعرف ما إذا كانت هذه أفضل الممارسات أم لا. هنا مثال على بعض المستقات حتى الآن:

$('#dialog').html('A TON OF HTML TO BUILD A FORM').dialog('option', 'buttons', { 'Save': function(){$.post('/use/add/', $('#use_form').serialize(), function(data){ ......There were 4 more lines of this but I'm saving you so you don't rip your eyeballs out hopefully you get the idea.....dialog('option','title','New Use').dialog('open');

كما ترون لأن الكثير من الوظائف التي استدعيتها، اتخذت وظائف كحجج، عندما أقوم بإنشاء وظائف مجهولة، في نهاية المطاف مع فوضى ضخمة (كان هناك حوالي 3 إعلانات وظيفة مجهولة أكثر في هذا الرمز)

يجب أن أقوم ببساطة بذل حفنة من الوظائف واستدعاء أولئك لجعلها أكثر قابلية للقراءة. السبب الوحيد الذي سأكون فيه ضد هذا هو أن لدي مجموعة من الوظائف المعلنة التي تستخدمها فقط مرة واحدة.

شكرا مقدما للمساعدة!

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

المحلول

حدد الوظائف في النطاق الصحيح وليس مشكلة كبيرة.

var generateHTML = function() {
  ...
};
var somethingElse = function() {
  ...
};

... some more ...

$('#dialog').html( generateHTML() )...etc

ليس هناك الكثير الذي يمكنك القيام به باستثناء إعادة تنظيم التعليمات البرمجية الخاصة بك بشكل عام (قل، باستخدام نمط وجوه موجهة) لتغليف التعليمات البرمجية لذلك ليس فوضوي جدا.

نصائح أخرى

السبب الوحيد الذي سأكون فيه ضد هذا هو أن لدي مجموعة من الوظائف المعلنة التي تستخدمها فقط مرة واحدة.

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

إذا كانت هناك أي أنماط لوظائفك المجهولة الخاصة بك عبر الصفحات، فسأحاول إعادة إدماج الوظائف المسماة التي توفر قاعدة مشتركة للوظائف اللازمة.

سأتميل إلى تجنب وجود سلاسل كبيرة من HTML داخل مكالمات طريقة مسج أو مضمنة داخل JavaScript <script> العلامات والحفاظ على هذه في موقع منفصل يمكن الاستفسار بسهولة لاسترداد المحتوى ذي الصلة - قد يكون هذا ملفات نصية، إلخ.

طريقة واضحة للحفاظ على الصيانة هي استخدام نوع من التنسيق.

أفهم كرهك للتسمية الوظائف المستخدمة منفردة، لكن من السهل احتواء الأسماء. تتمثل JavaScript Ediom لتقليد النطاق في التفاف الرمز المعني في وظيفة مجهولة يسمى على الفور:

(function () {
  var f = function (x) ...
  var g = function (y, z) ...
  // operations involving f and g
}()); // called immediately

أنا أفضل شكل آخر، مما يجعل حقيقة أن الرمز يتم تنفيذه على الفور أكثر وضوحا:

new function () { // called immediately
  var f = function (x) ...
  var g = function (y, z) ...
  // operations involving f and g
};

هناك طريقة أخرى لإنشاء أسماء مع هذا:

new function (i, j, k) {
  // functions f and g
  f(i, g(j, k));
}(3, 4, 5);

التنسيق والتنسيق والتنسيق! مع الاستخدام السليم لبييض رمزك يمكن تبدو مقروءة:

$('#dialog').
    html('A TON OF HTML TO BUILD A FORM').
    dialog('option',
        'buttons', {
            'Save': function(){
                var callback = function(data){
                    // There were 4 more lines of this
                    // but I'm saving you so you don't
                    // rip your eyeballs out hopefully
                    // you get the idea
                }
                $.post(
                    '/use/add/',
                    $('#use_form').serialize(),
                    callback
                )
             }
         }).
    dialog('option',
        'title',
        'New Use').
    dialog('open');

هذا هو مجرد كيفية تنسيقه شخصيا. هناك طرق أخرى، لكنني أقترح بشدة ترك الأقواس / الأقواس أو النقاط المخلقية / + في نهاية السطر لأن JavaScript يحتوي على ميل لإضافة "؛" في نهاية الخط إذا كان يعتقد أن الخط هو عبارة كاملة تشكيلها جيدا.

الشيء المهم ليس ما قاعدة تنسيق محددة تعتمده. الشيء المهم هو أن تكون متسقة حول هذا الموضوع. في بعض النواحي كانت بيثون على حق: إنها جيدة في بعض الأحيان لإجبار الناس على المسافة البادئة (لكنني أكره أن أجبرها بيثون).

سأحاول أن تتحلل الشفرة إلى الإضافات قدر الإمكان وفي الواقع تصميم التعليمات البرمجية حول هذا المبدأ. لست متأكدا من مدى جودة هذه الفكرة تناسب احتياجاتك.

من السهل الدخول إلى مشكلة تستنفذ أبدا في JQuery. وظيفة التسلسل جيدة إذا استخدمت بشكل معتدل، أو يستغرق الأمر إلى الأبد لقراءة وفهم التعليمات البرمجية التي كتبت وكأنها قبل 5 دقائق. وبهذا المعنى، فإن تنسيق التعليمات البرمجية الخاصة بك كما اقترح Slebetman سيكون مفيدا. بالإضافة إلى تحديد وظائفك كما اقترح من قبل شخص ما أو thenduks سيكون أيضا مساعدة كبيرة.

إذا كنت قد تمشي ميلا إضافيا في جهود إعادة التدوير الخاصة بك، أود أن أقترح عليك أن تعتبر نوعا من الأنماط المعمارية مثل MVC أو MVP لتنظيم التعليمات البرمجية الخاصة بك. قائمة بصرف النظر لديها لطيفة شرط على تنفيذ MVC مع جافا سكريبت. إذا كان هناك فصل من الرأي والنماذج، فإنه يسهل بسهولة استخدام الأحداث المخصصة والكثير من الإضافات الأخرى التي يمكن إعادة استخدامها بسهولة. كما أنه يفرض على التفكير من حيث طراز المجال بدلا من كائنات DOM (الجداول أو الصفوف أو Divs) أو الأحداث (انقر فوق أو كي اب) وما إلى ذلك. التفكير من حيث طراز المجال والأحداث المرتبطة به onPostRollback, onPostCreate أو onCommentAdded قد تكون قابلة للتطبيق على ذلك على سبيل المثال. jQuery أضيفت مؤخرا دعم الأحداث المخصصة الملزمة وهذه بعض المقالات الجيدة (أول, ثانيا) شرح كيف TOS.

بشكل عام، من الصعب إعادة استخدام وجهات النظر، لكن النماذج تتغير قليلا جدا عبر المشاريع وهي منطقة واحدة حيث يمكننا تحقيق أقصى قدر من إعادة الاستخدام.

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