2016-03-21 11 views
1

ボタンを押すと、コントローラにアクセスし、ボタンにアクセスしてテキストを「新しいテキスト」に変更したいとします。SAPUI5、コントローラ内のビュー要素にアクセス

onClickイベントは正常に機能します。しかし、私は、コントローラからビュー要素(myButton)にアクセスすることに固執しました。 このトピックに関するスレッドがありますが、それらのいずれも適用できませんでした。 例えば、何らかの理由で「sap.ui.getCore()。byId()」が機能しませんでした。

コントローラからビュー要素にアクセスする際のヒントや詳細情報がありますか?

ありがとうございました!ボタンの「onPressMyButton」たとえばという名前のイベントのために

+0

ボタンの 'onPress'イベントハンドラは、イベントを引数として受け取ります。イベント引数の 'getSource()'メソッドを使用してコントロールへの参照を取得します – Qualiture

+0

これで試してみます。ありがとうございました!そして、他のView要素にはどうすればアクセスできますか?イベントのソースではないテキストフィールドのようなものですか? – Dyrdek

+0

一般的には、コントローラからビューコントロールにアクセスしないでください(ビューはコントローラにアクセスする必要があります)。しかし、実際に必要な場合があります。 'sap.ui.getCore().Id(" someId ")'(JSView)または 'this.getView().Id(" someId ")'(XMLView)を使用してください。 – Qualiture

答えて

0

「プレス」、あなたが使用することができます。

onPressMyButton: function(oEvent) { 
 

 
    var idOfMyButton = oEvent.getSource().getId(); 
 
    
 
    var myButton = this.getView().byId(idOfMyButton); 
 

 
    myButton.setText("New Text"); 
 
    
 
}

またはコントローラのいずれかの部分に任意の関数の内部で、あなたが使用することができます。

var myButton = this.getView().byId("idOfMyButton"); 
 
            
 
myButton.setText("New Text");

+1

'oEvent.getSource()'は既に押されたボタンのインスタンスを返します。したがって、コードを短縮し、 'var myButton = oEvent.getSource(); 'で余分なルックアップを削除することができます。' this.getView().Id() 'のショートカットもあります:' this.byId() ' – schnoedel

+0

Ty @schnoedelのヒント!私は2番目の提案を知っていませんでしたが、最初のものについてはすべて理にかなっています!ありがとうございました! :) – carlosfcmendes

2

ビューの要素のIDはView.createId(sId)で作成されます。 createId(sId)は、指定されたsIdにビューのIDを付加してグローバルIDを作成します。あなたの意見はあなたの視点の中で一意でなければなりません。したがって、副作用なしで "button1"のようなものを使うことができます。 createId("button1")は、__xmlview1 - button1のようなものを返します。 XMLViewsを使用している場合、id属性は自動的にグローバルIDに変換されます(View.createId()は内部的にcalled by the xml parserです)。

View.createId(sId)へのペンダントはView.byId(sId)です。指定されたビューロケールID sIdを持つ要素を検索します。コントローラは、ショートカットとしてbyId(sId) functionそのdelegates to the views byId() functionを持っています。 jsbin

<mvc:View xmlns:mvc="sap.ui.core.mvc" xmlns="sap.m" controllerName="view1"> 
    <Button id="button1" press="onButton1Press" text="show my ID"/> 
    <Label id="label1" /> 
</mvc:View> 
onButton1Press:function(oEvent){ 
    var button = oEvent.getSource(); 
    var label1 = this.byId("label1"); 
    label1.setText(button.getId()); //Label displays "__xmlview0--button1" 
} 

例。

何らかの理由でグローバルIDがある場合は、sap.ui.getCore().byId(sId)を使用して要素をルックアップする必要があります。

ビューをまったく使用しない場合、またはcreateId()を指定しないJSViewの場合、IDはグローバルになります。ビュー内部

-1

var oButton = new sap.ui.commons.Button("this.createId("myButton")",{ 

text:'Click Me', 
press: function(){ 

    controller: functionName(optional); 
} 

})。 。コントローラの内部

は次のように実行しよう:

sap.ui.getCore()byId(this.createId( "myButtonという"))のgetValue();。

希望これはあなたを助けます。

関連する問題