销毁后创建具有相同ID的控件

时间:2018-07-11 19:04:57

标签: javascript sapui5

我销毁了一个控件视图,我想用相同的ID创建它。如何 实现吗?

       var sheetNumber = this.getView().byId("shtNum");
       sheetNumber.destroy();

       if(!sheetNumber){
          var sheetView = new sap.ui.xmlview({
                id:"shtNum",
                viewName:"com.prowess.view.PieceId"
          });
        this.createId(sheetView);
      }

但是它显示sheetView是未定义的。 在此先感谢

3 个答案:

答案 0 :(得分:0)

![代码] [1]

如果您使用的是IE 12,请使用let。 let在范围内工作。

[查看有关let关键字的更多信息] [2]

或者使用下面的代码也许可行。

   var sheetNumber = this.getView().byId("shtNum");
if(delete window.sheetNumber){
    var sheetView = new sap.ui.xmlview({
        id:"shtNum",
        viewName:"com.prowess.view.PieceId"
  });
this.createId(sheetView);
}

代码更新: 删除不能直接起作用,因为删除操作会删除边对象中的引用,因此我们需要使用完整的var FQN。 更新的代码正在我的系统上运行。 我们需要使用delete运算符在Windows对象中删除var。感谢您的建议@ user3808826

答案 1 :(得分:0)

我认为您需要删除控件的实例

   var sheetNumber = this.getView().byId("shtNum");
   sheetNumber.destroy();
   delete sheetNumber;

   if (!sheetNumber) {
      var sheetView = new sap.ui.xmlview({
        id:"shtNum",
        viewName:"com.prowess.view.PieceId"
      });
    this.createId(sheetView);
  }

答案 2 :(得分:0)

即使您在控件上调用destroy,该变量仍将包含对销毁控件的引用,因此您的if检查将永远无效。

您应该只需从代码中删除if,因为检查基本上是没有用的。您也可以选择“取消定义”原始变量,尽管这样做没有太大意义。

var sheetNumber = this.getView().byId("shtNum");
sheetNumber.destroy();
sheetNumber = undefined; // optional

var sheetView = new sap.ui.xmlview({
    id:"shtNum",
    viewName:"com.prowess.view.PieceId"
});

您与createId的行也不正确。如果您要获取刚刚创建的视图的ID,请使用以下方法:

sheetView.getId();