如何删除(子)菜单及其存在的所有痕迹?

时间:2016-06-23 08:11:03

标签: javascript menu adobe-indesign extendscript

使用代码

#targetengine "mine"
var mainmenu = app.menus.items("$ID/Main");
var menu = mainmenu.submenus.add("Test");

我在InDesign的菜单中添加了一个子菜单,后来我通过

删除了该子菜单
menu.remove();
delete menu;

不幸的是,当我尝试重新创建菜单时,没有任何反应,因为InDesign似乎认为它仍然存在 - 直到我重新启动InDesign,之后菜单出现(但没有添加任何项目)。如何永久删除菜单,以便以后可以重新创建,而无需重新启动InDesign?该菜单还会显示在InDesign的菜单首选项中(更糟糕的是,甚至两次,因为我尝试了#34;测试"以及"& Test"作为菜单名称),我会喜欢修好......

编辑原来这种奇怪的行为只有在通过InDesign的脚本面板执行脚本时才会发生,但既不是通过启动也不是通过ExtendScript工具包。但是,删除后菜单条目仍然存在。

2 个答案:

答案 0 :(得分:1)

当您使用持久会话时,仔细检查您正在做什么是一种很好的做法。在您的情况下,这意味着在尝试添加之前检查菜单可能的预先存在。

#targetengine "mine"
var mainmenu = app.menus.item("$ID/Main");

var menu = mainmenu.submenus.item("Test");
!menu.isValid && menu = mainmenu.submenus.add("Test", LocationOptions.before, mainmenu.submenus.item("$ID/#Keyboard_Help"));

//comment ON/OFF to remove or not the menu
//menu.remove();

次要点,我认为您不需要设置位置选项,因为主菜单栏中添加的任何菜单都不能放在帮助菜单之后。除非我错了,InDesign将始终将帮助菜单放在右边的最后位置。

答案 1 :(得分:1)

您可能在之前的尝试中创建了对菜单对象的大量引用,并且它是一个持久引擎,引用保持活跃。

重新启动InDesign,它应该这样做。

以下是我从附加脚本制作的一些截图。根据脚本的阶段和菜单的存在,isValid从true变为false。

The menu has been added and is valid The menu has been removed and is no longer valid

CREATE OR REPLACE FUNCTION link_job_to_industries(_jobid uuid, _indids uuid[])
  RETURNS void AS
$func$
   INSERT INTO industriesjobs (industry_id, job_id)
   SELECT _indid, _jobid
   FROM   unnest(_indids) _indid;
$func$ LANGUAGE sql;