واجهة IFocusableTree
تمثّل شجرة للعناصر القابلة للتركيز مع سياق التركيز النشط/السلبي الخاص بها.
يُرجى العِلم أنّ FocusManager هو المسؤول عن التركيز، ويمكن أن تتضمّن عمليات تنفيذ الأشجار عنصر IFocusableNode واحدًا كحد أقصى في كل مرة. إذا تم التركيز على الشجرة نفسها، تُعتبر العقدة التي تم التركيز عليها في الشجرة "نشطة" (أو "سلبية" إذا تم التركيز على شجرة أخرى).
تتم مشاركة التركيز بين شجرة واحدة أو أكثر، حيث يمكن أن تحتوي كل شجرة على عقدة نشطة أو سلبية واحدة بالضبط (ولا يمكن أن تتوفّر سوى عقدة نشطة واحدة في الصفحة بأكملها في أي وقت). تتمثل فكرة التركيز السلبي في تقديم سياق للمستخدمين حول المكان الذي سيتم فيه استعادة تركيزهم عند الانتقال مرة أخرى إلى شجرة تم التركيز عليها سابقًا.
يُرجى العلم أنّه إذا كنت بحاجة إلى العقدة الحالية التي تركّز عليها الشجرة (سواء كانت سلبية أو نشطة)، يمكنك استخدام FocusableTreeTraverser.findFocusedNode.
يُرجى العلم أنّه إذا كان من الضروري استرداد عقد معيّنة لهذا الشجرة، استخدِم lookUpFocusableNode أو FocusableTreeTraverser.findFocusableNodeFor.
Signature:
export interface IFocusableTree
الطُرق
الطريقة | الوصف |
---|---|
getNestedTrees() | عرض جميع الأشجار المُدمجة مباشرةً ضمن هذه الشجرة يُرجى العِلم أنّه ليس من الضروري أن تكون قائمة الأشجار المعروضة ثابتة، ولكن يجب تسجيل جميع الأشجار المعروضة في FocusManager. بالإضافة إلى ذلك، يجب أن يعرض هذا الإجراء أشجارًا متداخلة فعلية، لأنّ حذف شجرة متداخلة سيؤثّر في كيفية ربط تغييرات التركيز بعقدة معيّنة وشجرتها، ما قد يؤدي إلى إرباك المستخدم. |
getRestoredFocusableNode(previousNode) | تُعيد هذه الدالة عنصر IFocusableNode الخاص بهذه الشجرة الذي يجب أن يتلقّى التركيز النشط عندما يتمّ إعادة التركيز إلى الشجرة نفسها. هناك بعض الملاحظات المهمة جدًا التي يجب مراعاتها بشأن دورة حياة تركيز الشجرة عند تنفيذ إصدار من هذه الطريقة لا يعرض قيمة فارغة: 1. لا تضمن قيمة previousNode غير الصالحة حالة التركيز لأول مرة لأنّه يمكن حذف العقد. 2. لا تُستخدَم هذه الطريقة إلا عند التركيز على الشجرة نفسها، إما من خلال التنقّل باستخدام علامة التبويب أو من خلال FocusManager.focusTree(). وفي كثير من الحالات، سيتم التركيز مباشرةً على العقدة التي تم التركيز عليها سابقًا بدلاً من ذلك، ما سيؤدي إلى تجاوز هذه الطريقة. 3- يتضمن السلوك التلقائي (أي عرض القيمة null هنا) إما استعادة العقدة السابقة (previousNode) أو التركيز على جذر الشجرة. 4. قد لا تكون العقدة المقدَّمة صالحة في بعض الأحيان، مثل محاولة التركيز على عقدة تمت إزالتها مؤخرًا من الشجرة الرئيسية. يمكن للعمليات التحقّق من صلاحية العقدة من أجل تخصيص العقدة التي يجب أن يعود إليها التركيز. تهدف هذه الطريقة إلى حد كبير إلى تزويد عمليات تنفيذ الأشجار بوسائل لتحديد عقدة تلقائية أفضل من الجذر. |
getRootFocusableNode() | لعرض عقدة المستوى الأعلى التي يمكن التركيز عليها في الشجرة. من المتوقّع أن يتم التركيز على العقدة المعروضة في الحالات التي يريد فيها FocusManager التركيز على شجرة في حال عدم توفّر عقدة مركّزة حاليًا. |
lookUpFocusableNode(id) | تعرِض هذه الدالة عنصر IFocusableNode المقابل لرقم تعريف العنصر المحدّد، أو قيمة فارغة إذا لم تكن هناك عقدة محدّدة ضمن هذه الشجرة تحمل هذا الرقم التعريفي أو إذا كان الرقم التعريفي يتوافق مع جذر الشجرة. ولن تتطابق هذه القيمة أبدًا مع الأشجار المُدمجة. |
onTreeBlur(nextTree) | يتمّ استدعاؤه عندما يتمّ التركيز بشكل سلبي على العقدة التي تمّ التركيز عليها بشكل نشط سابقًا في هذه الشجرة، ولا تتوفّر عقدة نشطة أخرى في هذه الشجرة لتحلّ محلّها. تنطبق قيود التنفيذ والاعتبارات نفسها على دالة onTreeFocus(). |
onTreeFocus(node, previousTree) | يتمّ استدعاؤها عندما تتلقّى عقدة من هذه الشجرة تركيزًا نشطًا. يُرجى العلم أنّ القيمة null في previousTree لا تشير بالضرورة إلى أنّ هذه هي المرة الأولى التي يتم فيها تركيز Blockly. في الواقع، يمكن إجراء بعض الافتراضات حول حالة التركيز السابقة لأنّ الشجرة الفارغة السابقة تشير ببساطة إلى أنّ Blockly لم تحافظ على التركيز النشط قبل أن يتم التركيز على هذه الشجرة (يمكن أن يحدث ذلك بسبب خروج التركيز من div لإدراج Blockly، أو لحالات أخرى مثل التركيز المؤقت). راجِع IFocusableNode.onNodeFocus() لأنّ عمليات التنفيذ لها القيود نفسها التي تنطبق على هذه الطريقة. |