首页 > 解决方案 > 从另一个视图的控制器 UI5 访问一个控制器中的函数和模型

问题描述

我有 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);
    },

标签: sapui5

解决方案


关于您的模型:我强烈建议不要为每个控制器拥有自己的模型。相反,您应该在 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/


推荐阅读