1

我正在学习新的 Eclipse 4 RCP 平台,但遇到了一个有趣的问题。

MPart假设我正在为我的 Application.e4xmi 中定义的一个零件类设计:

public class SomePartView {
    private Text someText;
    private Button someButton;

    @PostConstruct
    public void createControls(Composite parent) {
        parent.setLayout(new GridLayout(3, false));
        someText = new Text(parent, SWT.BORDER);
        someButton = new Button(parent, SWT.NONE);
        someButton.setText("SomeButton");
    }

    @Focus
    private void setFocus(IEclipseContext context) {
        someText.setFocus();
    }

    // ... getters
}

我正在使用 WindowBuilder 来创建 ui,但我希望它没有任何行为代码,所以我创建了一个类来处理这样的交互:

public class SomePartViewController {

    @PostConstruct
    public void addBehavior(SomePartView view) {
        view.getSomeButton().addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                // do something
            }
        });    
    }
}

这是一个好习惯还是我在这里重新发明轮子并且e4已经为此提供了一些解决方案?如果不是,我如何将这些类连接在一起?我想避免在 Eclipse 上下文之外创建实例。由于官方的 e4 文档相当稀疏,如果有人可以链接我一本详尽的书或参考手册,我可以在其中找到答案,那就太好了。

4

1 回答 1

0

我不确定我是否可以给你一个完整的答案,但我会尝试提出一些提示或评论。

首先,只有应用模型引用的类才会获得依赖注入;所以SomePartView会得到相应的@PostConstruct执行。然而,没有直接连接到SomePartViewController应用程序模型之外,因此您不会获得任何自动注入。

有一些方法可以实现这一点,例如,通过使用扩展应用程序模型中描述的处理器扩展或通过循环依赖于您的依赖SomePartView并从那里实例化行为类。

如果我的问题正确,那么这将无法实现划分视图和行为的主要实现目的。

也许XWT是您真正需要的技术。这里的 UI 是声明式定义的,事件处理程序仍然在 Java 类中实现。我想 XWT 的工作方式已经是一种最佳实践,因为它可以与创建用户界面的 Android 编程风格相比较。

于 2012-11-05T20:50:50.263 回答