不同控制器中使用的片段相同-打开时出现重复ID错误

时间:2019-03-26 23:10:38

标签: sapui5

我有一个XML片段,已在2个不同的视图中使用过。当我单击项目 A 的表行时,将打开视图 A ,并且如果我单击该页面上的“保存”,则会打开片段。根据用户对片段执行的操作(它有2个按钮-是/取消),会发生下一步,但我会在流程结束时关闭片段。如果单击表中的项目 B -视图 B 打开。如果单击此页面上的“保存”,则应该打开相同的片段。但是相反,我收到一个重复ID错误

一个观察结果:如果我在两者中都使用了不同的Fragment(设计类似),则控制器问题已解决。一切正常。但是,如果相同,则会出现片段错误。 不知道为什么不能正常工作就关闭。尝试过destroy(),但随后却给了我setInititalFocus()未定义的类似错误的信息。

Controller A.js 类似的代码在ControllerB.js中

onManageConfirmation: function(oEvent) {
  var ccModelObj = {
    "headerText": "Hello",
    "operation": "deleteItem"
  };
  if (!this.ABC) {
    var ccModel = new JSONModel(); // required "sap/ui/model/json/JSONModel"
      this.ABC= sap.ui.xmlfragment("...fragments.commons.ManageConfirmation", this);
    this.getView().addDependent(this.ABC);
    this.ABC.setModel(ccModel);
  }
  this.ABC.getModel().setData(ccModelObj);
  this.ABC.open();
},

onYes: function(oEvent) {
  this.ABC.close();
},

onCancel: function(oEvent) {
// in fragment also added onClose property and calling this method only
  this.ABC.close();
},

2 个答案:

答案 0 :(得分:1)

这里只是一个疯狂的猜测,但是您的 this 在控制器中引用了两个不同的东西。

当您的in控制器A一切正常时,但是您加载控制器B,并且对 this.ABC 的检查返回false,因此您的代码将尝试加载已位于DOM上的片段重复的ID错误。

答案 1 :(得分:1)

是否检查过fragment.xml是否使用了任何ID?如果是,则必须确保先破坏碎片再重新打开。