Listeners + XTemplate を使用しています。
私たちの目標は、'itemtap' リスナーを XTemplate の ID に委任することです (つまり、div id="xplay")。
受け取ったエラー:
Error in event handler for 'undefined': INDEX_SIZE_ERR: DOM Exception 1 undefined event_bindings:207
chrome.Event.dispatch event_bindings:207
chromeHidden.Port.dispatchOnMessage miscellaneous_bindings:250
XTemplate は次のとおりです。
var itemTpl = new Ext.XTemplate(
'<tpl for=".">',
'<img src="http://www.myShortenedUrl.com/{taskImgPath}" />',
'<img src="http://www.myShortenedUrl.com/{timeImgPath}" />',
'<div id="xplay">',
'<img src="http://www.starrbc.org/play_button.jpg" />',
'</div>',
'</tpl>'
);
以下は、XTemplate ( itemTpl ) がバインドされた xtype: リストと、"xplay" に委任された itemtap リスナーです。
xtype: 'panel',
items: [{
xtype: 'list',
id: 'bookmarkView',
store: bookmarkStore,
itemTpl: itemTpl, // setting the XTemplate here
listeners: {
itemtap: function(bookmarkView, index, item, e){
console.log("Hello I am Here!");
},
element: 'innerElement',
delegate: 'xplay'
}
element: 'innerElement'
andを削除し、XTemplate の任意の部分をクリックすると関数delegate: 'xplay'
がトリガーされますが、それは私たちの目標ではありません。itemtap
PLAY ボタンだけがこのリスナーをトリガーするようにします。
アップデート
迅速な対応をありがとうエヴァン。
これが私があなたの入力で試したことです-間違っている場合はお知らせください。
div id を div クラスに変更しました。
var itemTpl = new Ext.XTemplate(
'<tpl for=".">',
'<img src="http://www.myShortenedUrl.com/{taskImgPath}" />',
'<div class="xplay">',
'<img src="http://src.sencha.io/200/http://www.starrbc.org/play_button.jpg" />',
'</div><br/>',
'</tpl>'
);
イベント オブジェクトのチェックを追加し、要素とデリゲートのコードをコメントアウトしました (これらをそのままにしておくと機能しません)。
listeners: {
itemtap: function(bookmarkView, index, item, e) {
console.log("Hello I am Here!");
if (e.getTarget().hasCls('xplay')) {
console.log('hasCls: xplay');
}
} //,
// element: 'innerElement',
// delegate: 'xplay'
}
ただし、次の問題が発生しました。
Uncaught TypeError: Object [object Object] has no method 'getTarget' 'undefined' のイベント ハンドラでエラーが発生しました: INDEX_SIZE_ERR: DOM Exception 1 undefined
混乱しています。それは、Event オブジェクトを取得していないということですか? それとも、あなたの説明を間違って解釈しましたか?