1 回答

TA貢獻(xiàn)1854條經(jīng)驗(yàn) 獲得超8個贊
該方法sap.ui.controller
將返回一個新的控制器實(shí)例,如文檔中所述:
如果僅給出名稱,則返回命名控制器類的新實(shí)例。
因此,它很可能會返回與視圖不關(guān)聯(lián)的控制器的副本,因此將找不到該副本。該方法本身也已被棄用,因此,我不建議在較新的UI5版本上一般使用該方法。
在兩個控制器之間進(jìn)行通信的首選方式是使用sap.ui.core.EventBus
。
在第二個控制器中,您首先要訂閱中的事件onInit
,然后將其綁定到函數(shù):
onInit: function() { sap.ui.getCore().getEventBus().subscribe("Controller2", "set", this.setFromEvent, this); // .... }
第一個和第二個參數(shù)是通道和事件名稱,您可以自由選擇。第三個參數(shù)是要調(diào)用的方法,第四個參數(shù)將用作this
該方法內(nèi)部的值。
為了觸發(fā)事件,您可以在其他控制器中使用EventBus的publish方法:
sap.ui.getCore().getEventBus().publish("Controller2", "set", { value: "pancakes" });
第一個和第二個參數(shù)是與您上面的訂閱對應(yīng)的頻道和事件名稱。第三個參數(shù)是帶有可發(fā)送數(shù)據(jù)的對象,您可以自由選擇該數(shù)據(jù)。
當(dāng)然,您還需要setFromEvent
在第二個控制器中創(chuàng)建方法:
setFromEvent: function(sChannelId, sEventId, oData) { this.set(oData.value); }
此方法的參數(shù)對應(yīng)于傳遞給上述publish方法的值。
添加回答
舉報