sapui5 - 从另一个视图的控制器 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);
},
解决方案
关于您的模型:我强烈建议不要为每个控制器拥有自己的模型。相反,您应该在 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/
推荐阅读
- ruby-on-rails - 添加注册条件以设计
- r - ggplot2中的分组箱线图与点图相结合
- python - 如何使用 matplotlib 创建购买活动图?
- raspberry-pi3 - 如何在 Raspberry Pi 3 Model B+ 上安装 PfSense
- android - 处理 FirebaseUI 登录和离线 Firestore 数据?
- c - C 中的 XOR 相同数据导致非零值。为什么?
- jquery - Bower jquery 安装失败
- c# - C#解析文本文件会丢失每个文本文件的第一行
- python - paramiko 的 SFTP 挂起和身份验证失败
- python - 如何使用 TensorFlow 模型进行预测?