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

时间:2018-08-08 04:53:36

标签: sapui5

我有2个视图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);
    },

1 个答案:

答案 0 :(得分:0)

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

在视图控制器中访问它们
this.getOwnerComponent().getModel("urModel")

另一个变种是创建baseController。在此,您可以定义将由多个控制器以及您的模型使用的功能。所有其他控制器都对该baseController进行了扩展,因此可以通过以下方式在所有模型中使用这些模型:

this.getView().getModel("urModel")

关于功能,您可以使用事件总线。简而言之,它允许您创建在控制器A中触发并在控制器B中列出的事件。在此处阅读有关如何使用它的详细信息: https://blogs.sap.com/2015/10/25/openui5-sapui5-communication-between-controllers-using-publish-and-subscribe-from-eventbus/