我們有一個包含四個頁面的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
}
}
});
現在,我們希望得到通知在FormPages中,每當用戶在源頁面上進行一些更改(例如XTextEditor)時,每當EMF模型被更改時。
我們嘗試將IXtextModelListener和IXtextDocumentContentObserver添加到IXtextDocument;但是這些會調用XTextEditor中輸入的每個字符。
我們的要求是僅當EMF模型中的值發生變化時(而不是用於文本格式化,例如插入/移除空白時)纔會收到通知。
有人可以提供一些指針嗎?
問候, AKHIL
你還嘗試建立'org.eclipse.emf.common.notify.Notifier'嗎? – SpaceTrucker
@SpaceTrucker:感謝您的快速回復!我沒有使用這種方法。你能詳細告訴我嗎? –
我自己並沒有使用這個API,但是由於每個'EObject'都實現了它,所以我認爲這是個好主意。您將不得不爲模型中的每個對象註冊相同的'org.eclipse.emf.common.notify.Adapter'。當你的模型改變時,這個適配器會得到通知。但爲了使其發揮作用,xtext編輯器不能每次都創建一個新模型,但必須修改現有模型。 – SpaceTrucker