Flight には優れたイベント システムがあり、コンポーネント ノードのイベント ハンドラーを簡単にセットアップできます。ただし、動的要素を含むノードの委任イベントに応答しようとすると、いくつかのことがわかりませんでした。
状況は次のとおりです。
<div class="component">
<ul id="list">
<!-- dynamic elements show here -->
</ul>
</div>
およびコンポーネント:
var ItemComponent = (function() {
function ItemComponent() {
this.defaultAttrs({
listSelector: '#list',
itemSelector: '#list li'
});
this.addItem = function(ev, params) {
var item = $('<li>'),
link = $('<a href="#">').html(params.content);
this.select('listSelector').append(item.append(link));
};
this.itemClick = function(ev, params) {
console.log("Item clicked: target=", ev.target);
console.log("Item clicked: currentTarget=", ev.currentTarget);
};
this.after('initialize', function() {
this.on(document, 'uiAddListItem', this.addItem);
this.on('click', { 'itemSelector': this.itemClick });
});
}
return flight.component(ItemComponent);
})();
$('#add-item-btn').on('click', function(){
$(document).trigger('uiAddListItem', {
content: $('input[name="item-content"]').val()
});
});
ItemComponent.attachTo('.component');
これは基本的に、ユーザーがli
アイテムをリストに追加できるようにするだけです。それぞれに、要素<li>
にラップされたコンテンツがあります。ただし、ハンドラーが実行されるときは、クリック イベントを受け取った要素では なく、<a>
実際の要素にアクセスしたいと考えています。<li>
<a>
itemClick
ハンドラーでは、要素event.target
はクリックを受け取った要素 (この場合は<a>
要素) です。そして、これevent.currentTarget
はイベントがバインドされている実際のコンポーネントでもあります ( <div class="component">
)。
<li>
この場合、委任された動的要素をどのように取得しますか?
ここに作業中のJSBinがあります