Чтобы расширить существующую реализацию контекстного меню в текстовом поле многоразового образом, создать шаблон, который preapplies vexi.widget.textarea
и положить прочитать ловушки на contextActions
собственности. Мы можем использовать cascade
, чтобы вызвать чтение из этого свойства - то есть вызвать существующую реализацию - которая возвращает массив. Мы просто добавить к этому массиву:
<vexi xmlns="vexi.widget">
<textarea>
// overlays the trap specified in the inherited
// org.vexi.lib.text.contextmenu by textarea
thisbox.contextActions ++= function() {
var actions = cascade;
actions.push(
new .menuitem({
text: "Foo",
action: function(v) { cascade = v; vexi.log.info("foo"); },
enabled: enabled
}));
return actions;
}
</textarea>
</vexi>
фон
Ключ к расширению существующего TextArea является понимание того, как Traps и как <textarea>
виджет наследует через preapplied шаблоны (и шаблонов они preapply, и т.д.) , Вы можете пройти через иерархию виджетов, начиная с src/vexi/widget/textarea.t
, затем просматривая соответствующие предварительные примеры. Вы, в конце концов, увидите, что org.vexi.lib.widget.textarea
preapplies org.vexi.lib.text.contextmenu
, и там мы можем увидеть реализацию контекстного меню по умолчанию с копией/вырезанием/вставкой и т. Д.
Обсуждено на [meta] (http://meta.stackoverflow.com/questions/309359/how -в-таг-ан-непомеченный-вопрос-использование-а-редкой-технологии). – pnuts