Sapui5 从另一个视图访问一个控制器中的功能和模型';s控制器UI5

Sapui5 从另一个视图访问一个控制器中的功能和模型';s控制器UI5,sapui5,Sapui5,我有两个视图A和B,其中分别定义了各自的控制器和模型。由于某些原因,我不得不将2个元素从A视图移动到B视图。其中一个元素是带有按下事件的按钮链接。我将元素移动到另一个视图,但当我单击链接时,它不会触发按下。我的理解是因为B的控制器没有这个功能。如果我在B的控制器中编写相同的函数,我会得到一个错误,说模型的setProperty无法设置为找不到。因为该模型仅在A的控制器中的作用域中。如何访问它 链接的新闻事件: pressEvent: function(oEvent) { this

我有两个视图A和B,其中分别定义了各自的控制器和模型。由于某些原因,我不得不将2个元素从A视图移动到B视图。其中一个元素是带有按下事件的按钮链接。我将元素移动到另一个视图,但当我单击链接时,它不会触发按下。我的理解是因为B的控制器没有这个功能。如果我在B的控制器中编写相同的函数,我会得到一个错误,说模型的setProperty无法设置为找不到。因为该模型仅在A的控制器中的作用域中。如何访问它

链接的新闻事件:

pressEvent: function(oEvent) {
        this.getModel("stock").setProperty("/Links/Visible", true);
        var stockroomsarr = this.getModel("stockRms").getProperty("/Stockrooms");

        if (stockrooms !== null && stockrooms.length > 0) {
            this.getModel("stock").setProperty("/Text/Visible", false);
        }
        this.getModel("stock").refresh(false);
    },

关于你的模型:我强烈建议不要为每个控制器都有自己的模型。相反,您应该在component.js的init中定义和设置它们。然后,可以在视图控制器中通过调用

this.getOwnerComponent().getModel("urModel")
另一个变体是创建baseController。在这种情况下,您可以定义多个控制器以及模型要使用的函数。所有其他控制器都扩展了baseController,因此所有控制器中的模型都可以通过以下方式获得:

this.getView().getModel("urModel")
关于功能,您可以使用事件总线。简而言之,它允许您创建在控制器A中触发并在控制器B中列出的事件。有关如何使用它的详细信息,请阅读此处:

此外,我强烈建议使用metadata.json方法声明模型(从技术角度)。从建模的角度来看,只有当模型在逻辑上是分开的,我才会将它们分成不同的模型,在本例中似乎就是这样。