我有一个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();
},
答案 0 :(得分:1)
这里只是一个疯狂的猜测,但是您的 this 在控制器中引用了两个不同的东西。
当您的in控制器A一切正常时,但是您加载控制器B,并且对 this.ABC 的检查返回false,因此您的代码将尝试加载已位于DOM上的片段重复的ID错误。
答案 1 :(得分:1)
是否检查过fragment.xml是否使用了任何ID?如果是,则必须确保先破坏碎片再重新打开。