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