2011-07-13 9 views
1

A同様の質問がここに答えた:How to add itemtapExt.dispatch within from itemタップリスナー?

しかし、私はonItemDisclosure:からlisteners: {itemtap:}に私のExt.dispatch()コードを移動しようとすると、それは動作しません。

Ext.dispatchは、もともとここに住んでいた:

onItemDisclosure: { 
     scope: this, 
     handler: function (record) { 
      // Call the controller's "show" action 
      Ext.dispatch({ 
       controller: myApp.controllers.products, 
       action: 'show', 
       id: record.getId() 
      }); 
     } 
    } 

をしかし、今、私は(開示のボタンを削除し、行全体が選択可能にするために)、それはここに住みたいと思う:

listeners: { 
     scope: this, 
     itemTap: function (record) { 
      alert('!!!'); 
      // Call the controller's "show" action 
      Ext.dispatch({ 
       controller: myApp.controllers.products, 
       action: 'show', 
       id: record.getId() 
      }); 
     } 
    } 

EDIT : itemTap:リスナー内の関数が呼び出されます(警告が表示されます)が、の場合のようにコントローラで'show'アクションが呼び出されませんはonItemDisclosure:に住んでいました。

+0

あなたはJavaScriptエラーが発生していますか? –

+0

愚かなブラウザキャッシング関連のエラー(これは現在解決されています)以外は、javascriptのエラーは表示されませんでした。 –

答えて

2

他の質問のようにリスト内でこれを行うと仮定すると、itemtapイベントには4つの引数が渡されます。Ext.DataView this、Number index、Ext.Element item、Ext.EventObject e。

は、あなたがのgetId()を想定しています

itemtap: function(dataView, index, item, e) { 
    Ext.dispatch({ 
      controller: myApp.controllers.products, 
      action: 'show', 
      id: index 
     }); 
} 

のような何かをしたいあなたに、レコードのインデックスを与えています。それがあなたに何か他のものを与えている場合は、あなた自身がレコードオブジェクトを得ることができます。

dataView.getStore().getAt(index) /* .getId() */ 

希望に役立つ希望。

+0

別のコンソールログを追加しましたが、ディスパッチが実際に呼び出されていることがわかりましたが、何か(私はそれにアクセスできません)が未定義になっていました。私はこれを試して、報告して戻します。 –

+0

FirebugやChromeの内蔵デバッガ(IEを使用している場合はgodを助けます)などのデバッガを使用して、コンソールログに加えてスクリプト自体にブレークポイントを設定すると便利です。 –

+0

さて、上記のようなitemtap:イベントはうまく動作しますが、インデックスは1でなく0でインデックスされているので、インデックスに++を付ける必要があります。 –