2

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'がトリガーされますが、それは私たちの目標ではありません。itemtapPLAY ボタンだけがこのリスナーをトリガーするようにします。

アップデート

迅速な対応をありがとうエヴァン。

これが私があなたの入力で試したことです-間違っている場合はお知らせください。

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 オブジェクトを取得していないということですか? それとも、あなたの説明を間違って解釈しましたか?

4

2 に答える 2

1

あなたはそれについて間違った方法で進んでいます。

1) ID は一意である必要があります。ID を何度も繰り返すことはできません。要素ごとに 1 つ必要です。代わりに、要素にクラス名を付けます。

2) これまでと同じように itemtap イベントをリッスンし、イベント オブジェクトをチェックしてデリゲートと一致するかどうかを確認します。

if (e.getTarget().hasCls('myCustomCls')) {
    // do something
}
于 2012-07-08T10:21:37.953 に答える
0
listeners: {
    element: 'element',//i hope element works.
    delegate: 'div.xplay',
    event:'tap',
    fn: 'Your function here',
}

これは、リスナーがあなたの要件にどのようにあるべきかです。

于 2012-11-16T13:13:02.403 に答える