رابط IFocusableTree
درختی از عناصر قابل تمرکز را با زمینه تمرکز فعال/غیرفعال خود نشان می دهد.
توجه داشته باشید که تمرکز توسط FocusManager مدیریت می شود و پیاده سازی های درختی می توانند حداکثر یک IFocusableNode را در یک زمان متمرکز کنند. اگر خود درخت فوکوس داشته باشد، گره متمرکز درخت «فعال» در نظر گرفته می شود (اگر درخت دیگری فوکوس داشته باشد، «منفعل» است.
فوکوس بین یک یا چند درخت به اشتراک گذاشته می شود، جایی که هر درخت می تواند دقیقاً یک گره فعال یا غیرفعال داشته باشد (و فقط یک گره فعال می تواند در کل صفحه در هر زمان معین وجود داشته باشد). ایده فوکوس غیرفعال این است که زمینه ای را برای کاربران فراهم کند که در آن هنگام بازگشت به درختی که قبلاً متمرکز شده بود، تمرکز آنها بازیابی می شود.
توجه داشته باشید که اگر گره متمرکز فعلی درخت (غیرفعال یا فعال) مورد نیاز باشد، می توان از FocusableTreeTraverser.findFocusedNode استفاده کرد.
توجه داشته باشید که اگر گره های خاصی برای بازیابی این درخت نیاز است، از lookUpFocusableNode یا FocusableTreeTraverser.findFocusableNodeFor استفاده کنید.
امضا:
export interface IFocusableTree
روش ها
روش | توضیحات |
---|---|
getNestedTrees() | همه درختان مستقیماً تودرتو در زیر این درخت را برمی گرداند. توجه داشته باشید که لیست درختان بازگشتی نیازی به پایدار بودن ندارند، با این حال همه درختان بازگشتی *do* باید با FocusManager ثبت شوند. علاوه بر این، این باید درختان تودرتو واقعی را برگرداند زیرا حذف یک درخت تودرتو بر نحوه تغییر فوکوس نقشه به یک گره خاص و درخت آن تأثیر میگذارد و به طور بالقوه منجر به سردرگمی کاربر میشود. |
getRestoredFocusableNode (گره قبلی) | IFocusableNode این درخت را برمیگرداند که باید فوکوس فعال را دریافت کند زمانی که خود درخت فوکوس را به آن بازگرداند. نکات بسیار مهمی وجود دارد که باید در مورد چرخه عمر فوکوس یک درخت در هنگام اجرای نسخه ای از این روش که null را برنمی گرداند در نظر گرفت: 1. یک پیشین گره خالی، حالت فوکوس برای اولین بار را تضمین نمی کند زیرا گره ها می توانند حذف شوند. 2. این روش تنها زمانی استفاده میشود که خود درخت، از طریق پیمایش تب یا از طریق () FocusManager.focusTree متمرکز باشد. در بسیاری از موارد، گره متمرکز قبلی مستقیماً به جای آن متمرکز می شود که این روش را دور می زند. 3. رفتار پیش فرض (یعنی برگرداندن null در اینجا) شامل بازیابی گره قبلی (previousNode) یا تمرکز ریشه درخت است. 4. گره ارائه شده ممکن است گاهی اوقات دیگر معتبر نباشد، مثلاً در موردی که سعی می شود گره ای را که اخیراً از درخت مادرش حذف شده است متمرکز کنیم. پیادهسازیها میتوانند اعتبار گره را بررسی کنند تا گرهی را که تمرکز باید به آن بازگردد، تخصصی کنند. این روش تا حد زیادی در نظر گرفته شده است تا پیاده سازی های درختی را با ابزاری برای تعیین یک گره پیش فرض بهتر از ریشه آنها فراهم کند. |
getRootFocusableNode() | گره قابل تمرکز سطح بالای درخت را برمیگرداند. انتظار می رود که گره برگشتی در مواردی متمرکز شود که FocusManager می خواهد درختی را در موقعیتی متمرکز کند که در حال حاضر گره متمرکزی ندارد. |
LookUpFocusableNode(id) | IFocusableNode مربوط به شناسه عنصر مشخص شده را برمیگرداند، یا اگر گره دقیقی در این درخت با آن شناسه وجود نداشته باشد یا اگر شناسه با ریشه درخت مطابقت داشته باشد، null را برمیگرداند. این هرگز با درختان تو در تو مطابقت ندارد. |
onTreeBlur (NextTree) | زمانی نامیده می شود که گره فعال قبلی این درخت اکنون به صورت غیرفعال متمرکز شده است و هیچ گره فعال دیگری از این درخت جای آن را نمی گیرد. این محدودیتها و ملاحظات پیادهسازی مشابه ()onTreeFocus را دارد. |
onTreeFocus (گره، درخت قبلی) | زمانی فراخوانی می شود که یک گره از این درخت فوکوس فعال دریافت کرده باشد. توجه داشته باشید که درخت قبلی تهی لزوماً نشان دهنده این نیست که این اولین باری است که Blockly فوکوس را دریافت می کند. در واقع، فرضیات کمی در مورد وضعیت فوکوس قبلی می توان انجام داد، زیرا درخت تهی قبلی به سادگی نشان می دهد که Blockly قبل از اینکه این درخت متمرکز شود، فوکوس فعال را حفظ نکرده است (که می تواند به دلیل خروج فوکوس از قسمت تزریق Blockly یا برای موارد دیگر مانند فوکوس زودگذر رخ دهد). به IFocusableNode.onNodeFocus() مراجعه کنید زیرا پیاده سازی ها همان محدودیت هایی را دارند که در آن متد وجود دارد. |