2016-11-03 16 views
0

私はHCPでローカルに実行アプリ内の要素を検査持って、idがapplication-MaintainMasterData-display-component---addRoute--formですが、私はクラウドに展開するときに、idはアプリ名は、変更、および上流階級の方法でdisplayapplication-MaintainFleet-Display-component---addRoute--formローカルユニークIDがHCPのIDと矛盾するのはなぜですか?

に変更私のsap.ui.getCore().byId()はクラウドで失敗しました。なぜこのようなことが起こるのか、私は混乱していた。

私はイベントハンドラにいましたが、oEventスコープが必要なので、this.getView().byId()this.createId()は私のためには機能しません。

参考:

sap.ui.getCore().byId() returns no element

https://sapui5.netweaver.ondemand.com/sdk/#docs/guide/91f28be26f4d1014b6dd926db0e91070.html

========= UPDATE =========

私もsap.ui.getCore().byId("application-MaintainMasterData-display-component---addRoute").byId("form")を試してみましたが、同じ問題、view idapplication-MaintainFleet-Display-component---addRouteです。

答えて

1

IDは動的に生成されます。だからあなたはそれらに頼ることはできません。そのため、sap.ui.getCore().byId()を使用しないでください。セパレータ-----も将来変更される可能性があります。

ローカルIDを解決するには、常に最も近いビューまたはコンポーネントのbyId()メソッドを使用する必要があります。あなたの呼び出しをチェーンすることができます:component.byId("myView").byId("myControl")

あなたのイベントハンドラーでthisはコントローラを参照する必要があります。 XMLViewの場合、これはこれ以上行わなければならないはずです。

JSViewsを使用していると思いますか?イベントハンドラをコードにアタッチする場合は、常にattachWhatever()関数に2番目の引数を指定できます。オブジェクトは、イベントハンドラ内でthisになります。

Controller.extend("myView", { 
    onInit:function(){ 
    var button = this.byId("button1"); 
    button.attachPress(this.onButtonPress, this); //The second parameter will become 'this' in the onButtonPress function 
    }, 
    onButtonPress: function(oEvent){ 
    console.log(this); //this is the controller 
    var buttonPressed = oEvent.getSource(); //get the control that triggered the event. 
    var otherControl = this.byId("table"); //access other controls by id 
    var view = this.getView(); //access the view 
    } 
}); 

settings-object-syntaxを使用している場合は、イベントの配列を指定できます。これは、ハンドラ関数となるべきオブジェクトが含まれている必要がありthis

createContent:function(oController){ 
    return new Button({ 
    text: "Hello World", 
    press: [ 
     function(oEvent){ console.log(this); }, //the event handler 
     oController //oController will be 'this' in the function above 
    ] 
    }); 

あなたは常にハンドラ関数へのビューまたはコントローラを供給するためにクロージャを使用することができます非UI5イベントにアタッチされている場合は、次の

onInit:function(){ 
    var that = this; //save controller reference in local variable 
    something.on("event", function(){ console.log(that); }); 
       //you can use that local variable inside the eventhandler functions code. 
} 
+0

私は 'deleteIcon.attachPress(this.onDeleteStop、本)を試みた;'しかしonDeleteStop '中:機能(oEvent、Oコントローラ)' 'oController'は' undefined'、私はなかったのだと思う{Oコントローラを返します} 'settings-object-syntax'のポイントを取得しますか? – Tina

+0

'onDeleteStop:function(oEvent){コンソール。ログ(これ); } '。 * this *はあなたのコントローラーか、あなたがattach ...関数に指定したものです。 – schnoedel

+0

私は自分の答えにattachPressのコード例を追加しました。 – schnoedel

関連する問題