0

私はmiamicoderのsenchatouch2チュートリアルをフォローして大成功を収めています(http://miamicoder.com/2012/how-to-create-a-sencha-touch-2-app-part-2/)。まだこれの初心者は私のjavascriptの知識が私に何を制限しています。

私がやりたいのは、コントローラーに格納されているjavascript関数を呼び出しますが、ローカル変数を渡します。これが私のビューの1つの初期化で宣言された私のコードです:

var geo = Ext.create('Ext.util.Geolocation', {autoUpdate: false, listeners: {
            locationupdate: function(geo) {
                console.log('Got location: ',geo);
                findCurrentAddress(geo,"txtFrom");
            },
            //locationerror: {fn: this.onGotLocation, scope: this }
            locationerror: function(geo, bTimeout, bPermissionDenied, bLocationUnavailable, message) {
                alert("deal with this later")
            }
        }
    });
    geo.updateLocation();

次に、findCurrentAddressは次のように定義されます。

function findCurrentAddress(geo, txt){
  alert("do some stuff with the geo object");
}

この関数をコントローラーに移動し、このビューにアクセスできるようにするにはどうすればよいですか?上記のリンクのonNewButtonTapイベントでチュートリアルが行うことと同様です。

最終的な結果は同じですが、私は物事をきれいに保ちながら、機能を邪魔しないようにしたいと思います。

私はやってみました:

locationupdate: {fn: this.onGotLocation, scope: this }

必要なコードをコントローラーに配線します。これは、lat / longプロパティを持つgeoオブジェクトを失うことを除いて機能しました(少なくとも、それを渡す方法がわかりません!)

ヘルプ/ヒント/ポインタは大歓迎です!:)

4

2 に答える 2

1

簡単な答え-これをしないでください。ビューからコントローラーのメソッドを呼び出さないでください。

于 2012-07-03T11:34:06.120 に答える
0

ビューから起動してイベントを実行し、コントローラーでそのイベントをサブスクライブしてみませんか?

このようなもの:

...
locationupdate: function(geo) {
    console.log('Got location: ',geo);
    this.fireEvent('get_loc_update', geo); //this refers to your instance of Ext.util.Geolocation
},
...

コントローラー(またはそれを呼び出すもの)でget_loc_updateイベントをリッスンします。これにより、geoオブジェクトが渡されます。

于 2012-07-12T01:36:15.347 に答える