这个问题在这里已有答案:
我有一个XML片段,我在2个不同的视图中使用过。当我单击项目A的表格行时 - 视图A打开,如果我点击该页面上的“保存” - 片段打开。根据用户在片段上执行的操作(它有2个按钮 - 是/取消),下一步会发生,但我会在过程结束时关闭片段。如果我点击表格中的项目B - 视图B打开。如果我点击此页面上的“保存”,期望是应该打开的相同片段。但相反,我得到一个重复的ID错误。
一个观察结果:如果我在两者中使用不同的片段(设计上类似),则解决控制器问题。一切正常。但如果相同,碎片错误。不确定为什么关闭,如果不能正常工作。尝试destroy()
,但后来它给了我setInititalFocus()
undefined这样的错误。
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();
},
这里只是一个疯狂的猜测,但你的控件中引用了两个不同的东西。
当您在控制器A中一切都像魅力一样,但然后您加载控制器B并检查this.ABC返回false并且您的代码尝试加载已经在DOM的片段,因此重复Id错误。
如果你在里面使用过任何id,你有没有检查过你的fragment.xml?如果是,则必须确保在再次打开片段之前销毁片段。