我潛入EMF現在,並遇到了以下問題:EMF編輯域命令生成
我試圖刪除字段集場使用下面的代碼:
FieldElem ff = ds.getContent().getNestedFieldset().get(0).getField().get(0);
Command remove = new RemoveCommand(editingDomain, nf,
DescPackage.eINSTANCE.getNestedFieldsetElem_Field(), ff);
editingDomain.getCommandStack().execute(remove);
ff = ds.getContent().getNestedFieldset().get(0).getField().get(0);
Command remove2 = RemoveCommand.create(editingDomain, nf,
DescPackage.eINSTANCE.getNestedFieldsetElem_Field(), ff);
editingDomain.getCommandStack().execute(remove2);
ff = ds.getContent().getNestedFieldset().get(0).getField().get(0);
Command remove3 = RemoveCommand.create(editingDomain, ff);
editingDomain.getCommandStack().execute(remove3);
前兩個命令工作得很好,但第三個沒有。我甚至沒有添加到命令堆棧中,也沒有刪除任何內容。我究竟做錯了什麼?
更新:正如我在調試器中看到的,執行方法返回UNEXECUTABLE_COMMAND。
非常感謝! eContainer == null,就像你預測的那樣。如何解決它?它與模型設置有關嗎?我已經從XSD架構生成了我的模型,除了最大/最小元素外,沒有多少改變。 – execc 2012-02-10 10:29:36
@execc:我不知道XSD是如何運作的。如果您有.ecore文件,則可以在選擇關係時在屬性視圖中設置包容。請注意,激活遏制時,EMF的行爲會發生變化,因爲對象只能有一個容器:因此,如果將對象添加到遏制列表中,並且此對象已位於遏制列表中,則EMF會靜默移除對象從之前的名單。它可能很難調試。 – Baldrick 2012-02-10 10:39:55
這裏是我對模型的設置:https://lh4.googleusercontent.com/-1aIvcp-aJHs/TzT22CtrhDI/AAAAAAAAAAc/6GZhtwlSfBk/s963/containment.JPG,它看起來像字段與fieldset有遏制關係。怎麼了? – execc 2012-02-10 10:54:39