【发布时间】:2019-08-26 19:58:27
【问题描述】:
我正在为可以从不同视图调用的事件扩展 AbstractHandler。处理程序查找调用事件的视图或编辑器的推荐方法是什么?
HandlerUtil.getActivePart(event) 未返回引发事件的视图,因为活动视图在事件到达处理程序之前已更改。 (这是因为我们在非 UI 线程中有代码,它会定期收集信息并更新不同的视图,从而使不同的视图变为活动状态。)
此代码似乎有效,但是否推荐使用?由于它实际上不在 api 中,因此该密钥或实现会发生变化吗?
public class MyHandler extends AbstractHandler
{
public Object execute(ExecutionEvent event) throws ExecutionException
{
org.eclipse.core.expressions.IEvaluationContext context = (org.eclipse.core.expressions.IEvaluationContext) event.getApplicationContext();
String myParentContext = context.getVariable("parentContext").toString();
这返回了
PartImpl (correct.view.id) Context
一个想法可能是为处理程序使用命名约定,这样它们就不会在不同的视图中重复使用。但是,这不包括视图具有辅助 ID 的情况。我们需要知道辅助 id 才能找到视图并在对其执行操作后刷新对象。
【问题讨论】:
-
是的,该字符串很容易更改,因为它不是 API 的一部分。无论如何,“父母”观点是什么意思?当没有视图处于活动状态时,主菜单或键绑定调用的处理程序是什么。
-
“父级”是指当用户选择它的菜单项或弹出事件时的活动视图。到处理程序被调用时,活动部分已经改变。
-
一切都使用 HandlerUtil.getActiveXXX 代码,不知道还有没有别的。您的后台线程不应更改活动部分。
标签: event-handling eclipse-rcp