في إصدارات Discourse قبل 2.8.0.beta5، إذا قمت بتحرير موضوع ونقرت على القائمة المنسدلة لاختيار الفئة، فسيتم تحديد الفئة الحالية والتمرير إليها في قائمة الفئات، بحيث تكون مرئية على الفور في الأعلى، وتكون الفئات الفرعية الخاصة بها (إن وجدت) مرئية. يمكن بعد ذلك نقل الموضوع بسهولة إلى فئة فرعية أكثر ملاءمة.
العمل في 2.8.0.beta4 والإصدارات الأقدم:
اعتبارًا من 2.8.0.beta5، لم تعد الفئة الحالية يتم التمرير إليها عند فتح القائمة المنسدلة لاختيار الفئة:
آمل أن تكون عروض الفيديو القصيرة هذه مفيدة في إظهار ما أحاول وصفه بسرعة.
ملاحظة: في الأمثلة الخاصة بي، لدي خيارات “تثبيت مواضع الفئات” و “تثبيت مواضع الفئات عند الإنشاء” قيد التشغيل، ومع ذلك، فإن سلوك التمرير إلى الحالي مفقود مع تشغيل هذه الخيارات أو إيقاف تشغيلها.
لقد أكدت هذا في التطوير المحلي عن طريق تثبيت 2.8.0.beta4 وملاحظة السلوك المرغوب، ثم التحديث إلى 2.8.0.beta5 وملاحظة أن السلوك لم يعد يعمل.
لقد بحثت في الكود حتى وجدت أن الالتزام الكبير التالي الذي يتضمن select-kit.js هو المكان الذي حدث فيه التغيير (انتظر لحظة وسيقفز إلى أسطر الكود المعنية):
تمت إزالة الكود التالي من الدالة _scrollToRow()، والتي يتم استدعاؤها بواسطة الدالة _scrollToCurrent():
لقد أكدت أن إضافة هذا الكود مرة أخرى إلى select-kit.js في 2.8.0.beta5 يصلح المشكلة، على الرغم من أنه ليس من الواضح لي سبب إزالته، إلا أنني لست متأكدًا من الآثار الجانبية المحتملة الأخرى لإضافته مرة أخرى.
شكرًا لك على إلقاء نظرة على هذا، وآمل أن نتمكن من إعادة هذا السلوك للعمل في إصدار مستقبلي.
مرحباً جيفري، شكراً لك على إلقاء نظرة على هذا! لقد اختبرت آخر التغييرات، ولكن يبدو أنها لم تنجح. بما أنها تم دمجها، فقد تأكدت من فرع tests-passed.
من بين الالتزامين في طلب السحب، الالتزام الأول يعمل (ab0fbf1)، ولكنه يُلغى بالالتزام الثاني (92943ff).
يبدو التغيير في السطر 992 جيداً ولكنه لا يعطي التأثير المتوقع. يبدو أنه يحتاج إلى كتلة التعليمات البرمجية التي تمت إزالتها والتي تعدل قيمة collectionContainer.scrollTop.
نعم، لم أكن متأكدًا مما إذا كان هذا السلوك سيكون كافيًا. يمكنني إضافة هذا مرة أخرى غدًا. هل يمكنك أن تكون أكثر تحديدًا بشأن ما لا يعجبك بالضبط في هذا السلوك الآن من فضلك؟
شكراً لمتابعتك لهذا الأمر. مع تغييرات الكود الحالية (لقد تأكدت من سحب أحدث كود، ومسح tmp، وإعادة تشغيل خادم التطوير)، لم يستعد السلوك الذي كان موجوداً في الإصدارات قبل 2.8.0.beta5. لا يزال لا يقوم بالتمرير لعرض الفئة الحالية في أعلى الخيارات المرئية في القائمة المنسدلة.
السلوك الصحيح/المرغوب فيه هو ما هو موضح في الفيديو الأول في المنشور الأصلي، ولكنه لا يزال يعمل حالياً كما في الفيديو الثاني. حالياً، تبدأ شريط التمرير دائماً بالكامل من الأعلى، بغض النظر عن مكان الفئة الحالية في الخيارات.
يبدو أن السطر rowContainer?.focus({ preventScroll }); ليس له أي تأثير في هذه الحالة، بغض النظر عما إذا كانت preventScroll صحيحة، أو خاطئة، أو حتى إذا تمت إزالة السطر بأكمله.
السطر الأساسي الذي يجعل السلوك يعمل (غير موجود في الإصدار الحالي) هو:
بدون هذا، فإنه لا يقوم بالتمرير إلى الموضع الصحيح، حيث أن scrollTop يساوي 0 بشكل افتراضي. بعد تشغيل هذا السطر، يساوي scrollTop العدد الصحيح للبكسلات التي يحتاجها للتمرير لأسفل.
نأمل أن يكون هذا مفيداً. يرجى إعلامي إذا كان بإمكاني المساعدة في توضيح المزيد.
شكراً على ملاحظاتك. لقد أضفت المزيد من الفئات إلى العرض التوضيحي الخاص بي وتأكدت من ظهور الفئة الحالية الآن في منفذ العرض، وهذا بالتأكيد تحسن. سيكون من المثالي أن تظهر في أعلى القائمة، كما كانت في السابق. سيضمن ذلك ظهور المزيد من الفئات الفرعية أسفلها على الفور ويمكن للمستخدم النقر للتبديل إلى فئة فرعية دون الحاجة إلى التمرير لأسفل للكشف عنها أولاً. في رأيي، هذه حالة استخدام أقوى من الكشف عن الفئات المجاورة غير ذات الصلة. هل تم تغييرها لتكون في المنتصف عن قصد، أم كان ذلك تراجعًا عرضيًا للسلوك السابق؟ على أي حال، الأمر متروك لك - أنا فقط أقدم رأيي.
مرة أخرى، شكراً لك وأنا أقدر عملك الشاق على Discourse!