FormEditor에는 네 개의 페이지가 있습니다. 세 개의 FormPages와 네 번째 페이지는 소스 페이지로 XTextEditor입니다. 사용자가 어떤 변경을 수행 할 때마다xtext의 EMF 모델이 적절한 값으로 변경 될 때 알림을받는 방법
(예 : 텍스트 상자에 값 변경) 아래로 FormPages에를, 우리는 XTextDocument.modify() 메소드 내부 EMF 모델의 내용을 변경할 수 :
xtextEditor.getDocument().modify(new IUnitOfWork.Void<XtextResource>() {
@Override
public void process(XtextResource state) throws Exception {
IParseResult parseResult = state.getParseResult();
Assert.isNotNull(parseResult);
EObject rootASTElement = parseResult.getRootASTElement();
if (rootASTElement instanceof MyModel) {
XyzType t = ((MyModel) rootASTElement).getXyzType();
t.setName(name); <- ‘name’ is the new value entered on FormPage text box
}
}
});
지금, 우리는 공지를 받을지 사용자가 소스 페이지 (예 : XTextEditor)에서 일부 변경을 수행 할 때 EMF 모델이 변경 될 때마다 FormPages에 저장됩니다.
IXtextModelListener 및 IXtextDocumentContentObserver를 IXtextDocument에 추가하려고 시도했습니다. XTextEditor에 입력 된 모든 문자에 대해 호출됩니다.
우리의 요구 사항은 EMF 모델의 값이 변경 될 때만 알림을받는 것입니다 (예 : 공백 삽입/제거시 텍스트 형식이 아닌 경우).
누군가 어떤 포인터를 제공시겠습니까?감사합니다, 아킬
당신은 또한'org.eclipse.emf.common.notify.Notifier'에 구축하려고 했습니까? – SpaceTrucker
@SpaceTrucker : 빠른 답장을 보내 주셔서 감사합니다! 나는이 접근법을 사용하지 않았다. 너 그것에 대해 자세히 말해 줄 수 있니? –
나는 그 API를 직접 사용하지는 않았지만 모든'EObject'가 구현하기 때문에 좋은 생각이라고 제안했다. 모델의 모든 객체에 동일한'org.eclipse.emf.common.notify.Adapter'를 등록해야합니다. 모델이 변경되면이 어댑터에 알림이 전송됩니다. 그러나 이것이 작동하려면 xtext 편집기가 매번 새로운 모델을 생성해서는 안되며, 기존의 모델을 수정해야합니다. – SpaceTrucker