2012-03-24 14 views
4

Sencha Touch 2プロジェクトにボタンがあります。 ボタンは押された後でビューで破棄され、別のボタンが押された後に再構築されます。Sencha Touch 2ボタンルーズリスナー

しかし、ボタンはリスナーを再度取得しません。

リスナーは、ビューのコントローラにビルドされています。

Ext.application({ 
name: 'App', 
controllers: ['Main','Home'], 
views: ['Main','Home'], 
launch: function() {Ext.Viewport.add({xtype:'mainview'});} 
}); 

コントローラ

Ext.define('App.controller.Home', {extend: 'Ext.app.Controller', 
config: { 
    refs: {homeView: '#homeview',backBtn: '#btn_test1'}, 
    control: { 
     backBtn: { 
      tap: function(backBtn){ 
       console.log('[Controller][Home] btn monatsrate - - tap'); 
       Ext.Viewport.add({xtype: 'mainview'}); 
       Ext.Viewport.setActiveItem(1); 
      } 
     }, 
     homeView: { 
      deactivate: function (homeView){ 
       console.log('[Controller][Home] autodestroy homeview'); 
       //homeView.destroy(); 
       Ext.Viewport.remove(homeView); 
      } 
     } 
    } 

}, 
}); 

とビュー

Ext.define("App.view.Main", { 
extend:"Ext.Container", 
xtype:"mainview", 
config:{ 
    id:'mainview', 
    items:[ 
     { 
      xtype:'button', 
      id:'btn_test2', 
      text: 'test2' 
     } 
    ] 
}, 

})。

どのようにボタンをリスナーに戻すのを許可するか考えていますか?

答えて

3

これは、コントローラの「ref」がボタンのIDを使用してrefを作成しているためです。代わりに、あなたのボタンに別のセレクターを使用してください。たとえば、ボタンに "name"プロパティを与え、 "testbutton"という値を与えることができます。次に、あなたのrefは

refs: {homeView: '#homeview',backBtn: 'button[name=testbutton]'}, 

ように私は、ボタンおよび/を作成されたリスト項目のために、この同じ問題で苦労されるだろう、アプリケーションのフロー全体で何度も破壊されました。それ以来、何度か読んだことがあります。一般的に、Sencha Touchチームは特定の理由がない限り、IDをセレクタとして使用しないことをお勧めします。上の "名前"メソッドは私のために非常にうまく動作します。あなたは他のCSSスタイルのセレクタもたくさん使うことができます(別々に読む必要があります)。

これまでのコメントで述べたように、私はあなたの質問に対する答えを将来的に得る確率を高めるためにいくつかの回答を受け入れます。私はこの問題で壁に向かって4時間頭を打つので、これに答えるだけです。

0

あなたの問題はidパラメータとまったく同じだと思います。 IDを追加する場合は、それが一意であることを確認する必要があります。したがって、カスタムビューの設定にIDを追加すると、そのインスタンスを複数作成することはできません。私は100%の権利ではないかもしれませんが(コンテナの中にあるかもしれませんが、それはとにかく問題を引き起こすと信じています)、なぜあなたはそんなにidを望んでいませんか?また、あなたは、単にXTYPEであなたのビューを参照することができます。

refs: {homeView: 'homeview',backBtn: 'btn_test1'}, 

よろしく、

+0

私はそれがIDの問題だとは思いますが! Ext.Viewport.add({xtype: 'mainview'});を実行するこのコード。同じIDでより多くのビューを作成します。私はハンドラが常に最初のものに取り組んでいると信じています。 – igrek

1

煎茶の例は、「GOHOME」、「キャンセル」のような、ボタン上のアクションの設定を使用することをお勧めします「createPost」、など。これちょっと意味がある。
すべての参照は次の形式です:myContainer button [action = myAction]