2016-04-28 11 views
1

いくつかのユーティリティ機能を備えたカスタムモジュールからビューのコントローラにアクセスしたいとします。コンポーネント環境でのXMLビューのIDの設定方法は?

var oController = sap.ui.getCore().byId("__xmlview1").getController(); 

問題が__xmlview1が動的にフレームワークによって作成されるため、上記のコードは、実際の環境では動作しないことです。基本的には、このような方法を行うことができます。そこで、私は、インスタンス化中にビューのIDを設定する可能性を見つけようとしました。問題がある - 私は1つを見つけることができませんでした:

はview.xmlファイル内のIDが機能しないビューを提供しようとすると:

<mvc:View 
    controllerName="dividendgrowthtools.view.dividendcompare" 
    id="testID" 
    xmlns="sap.m" 
    ... 

部品のルータ設定でIDを設定しようとすると、どちらか動作しません:

... 
name: "Dividend Compare", 
viewId: "test", 
pattern: "Dividend-Compare", 
target: "dividendcompare" 
... 

問題は、私はXMLビューのインスタンス化を直接制御していないということです - ルータはそれをしない、それぞれのコンポーネントを。

だから、その問題の解決策はありますか?または、少なくともビューの名前を指定してビューIDを取得する方法を節約できますか?

答えて

0

SAPUI5 EventBusをご覧ください。

私はかなり確信しています、あなたはdividentcompareビューで何かをやってみましょう。 SAPUI5 Eventbusを使用すると、あるコントローラから別のコントローラへアクションをパブリッシュして、MVTパターンを制動することができます。あなたのdividendcompare.controller.jsで

:あなたのanothercontroller.controller.jsで今

onInit : function() { 
    var oEventBus = sap.ui.getCore().getEventBus(); 
    oEventBus.subscribe("MyChannel", "doStuff", this.handleDoStuff, this); 
    [...] 
}, 

handleDoStuff : function (oEvent) { 
    var oView = this.getView(); 
    [...] 
} 

、:

onTriggerDividendStuff : function (oEvent){ 
    var oEventBus = sap.ui.getCore().getEventBus(); 
    oEventBus.publish("MyChannel", "doStuff", { [optional Params] }); 
} 

あなたは今、すべての場合にはdividentcontrollerからビューを取得することができますあなたのアプリの他のすべてのコントローラーから。ビューに直接アクセスすることはできません。これはMVCパターンを制動しますが、コントローラにオプションを渡してそこで処理を行うことができます。

+0

かなりクール!イベントバスを知らなかった - 多くのありがとう! –

関連する問題