如何使用不同的控制器实例多次创建视图?

时间:2018-05-22 12:11:46

标签: sapui5

我正在使用多个磁贴的仪表板上工作。每个磁贴都是XML视图。首先,每个平铺视图应该被创建一次,但由于一些新的要求,用户应该能够使用不同的配置多次添加相同的平铺。

为实现这一目标,我只是尝试创建一个这样的视图:

sap.ui.xmlview({
  viewName: "com.sap.tiles." + selectedTile + "." + selectedTile
});

瓷砖正确显示,但似乎它使用与现有同类型瓷砖完全相同的控制器。每个变量都已在控制器中设置。是否可以实例化一个新的控制器?

我已经读过在一个窗口(使用不同的控制器实例)中多次使用相同的视图是不可能的,而应该使用组件或片段。是真的,还是我做错了什么?

最终编辑:

我解决了我的问题。这是我的代码非常具体的问题,导致错误的函数调用。 Boghyon Hoffmanns的回答帮助我找到了解决方案。

1 个答案:

答案 0 :(得分:0)

  

瓷砖正确显示,但似乎它使用与现有同类型瓷砖完全相同的控制器。每个变量都已在控制器中设置。

您可能在模块定义之外的闭包中声明了变量。

sap.ui.define([
  "sap/ui/core/mvc/Controller",
  // ...
], function(Controller /*, ...*/){
  "use strict";
  var something; // Visible to all Controller instances of the same name

  return Controller.extend("com.sap.tiles...", {
    onInit: function() {
      something = 1; // Applies to all Controller instances of the same name
      this.something = 0; // Applies to this instance only
    },

  });
});

多次创建相同的视图多次获取相应的Controller(因为模块已经定义),但 实例化模块(Controller)每次创建视图时。