Скажем, я хочу иметь AtomicText
блот, который похож на блот по умолчанию Link
, но является неизменяемым и может быть удален только целиком. Более конкретно:
- Курсор может находиться между символами
AtomicText
. - Можно выбрать части
AtomicText
. - Удаление хотя бы одного символа
AtomicText
приводит к удалению всегоAtomicText
. - После создания
AtomicText
невозможно добавить символы. Ни через события клавиатуры, ни через копирование и вставку.
Моя идея заключалась в том, чтобы сделать AtomicText
продолжением Embed
пятна. В этом случае весь блок AtomicText
удаляется, когда курсор находится справа от последнего символа и нажата клавиша возврата. Но другие операции не работают должным образом. Я предполагаю, что мне нужно переопределить некоторые Blot
методы, чтобы добиться правильного поведения, но здесь я немного растерялся.
Другая идея - прослушивать text-change
события, определять, находится ли курсор внутри AtomicText
пятна, и действовать соответствующим образом. Например, при нажатии клавиши Backspace найдите начальную и конечную позицию текущего AtomicText
блота и удалите все символы между этими индексами. Это кажется хрупким подходом.
Любые указатели будут оценены.
Подобные вопросы / пожелания следующие: