我想在Vexi应用程序的上下文菜单中添加自定义条目。

我尝试添加contextActions函数,但会引发错误:

<textarea>
    thisbox.contextmenu.contextActions = function() {
        return [{
            text: "Foo",
            action: function(v) { cascade = v; vexi.log.info("foo"); },
            enabled: enabled
        }]);
    }
</textarea>


我该怎么做呢?

最佳答案

若要以可重用的方式扩展现有的textarea上下文菜单实现,请创建一个预先应用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>


背景

扩展现有文本区域的关键是了解Traps以及<textarea>小部件如何通过预先应用的模板(以及它们预先应用的模板等)继承。您可以遍历窗口小部件层次结构,从src/vexi/widget/textarea.t开始,然后查找相关的前提条件。您最终将看到org.vexi.lib.widget.textarea预先应用了org.vexi.lib.text.contextmenu,在那里我们可以看到带有复制/剪切/粘贴等功能的默认上下文菜单实现。

10-04 22:12