0

Googleクローズのプロジェクトで作業しています。イベントリスナーをクエリセレクタにアタッチし、動的に追加された要素に同様に適用させたいと思います。私はGoogleの閉鎖ライブラリで同様の機能上の任意のドキュメントを見つけることができませんしてきたjQueryの ".on()"に相当するGoogle Closure

$(document).on('click', '.targetclass', function(e) {...}); 

:私はjQueryのを使用していた場合、私は何かのように行う可能性があります。私はハンドラを世界的なハンドラのリストに登録することができるようなものは簡単に作ることができると思いますが、ホイールを再発明していないと、このパターンがどれほど一般的であるかを考えると非常に驚くでしょう。

Google閉鎖にはこのようなことがありますか?

+0

それは私が、私は理解していない[goog.events.listen](https://developers.google.com/closure/library/docs/events_tutorial) – adeneo

+0

@adeneoです。 goog.events.listenには、リスナーをアタッチする要素が必要ですが、リスナーをドキュメントにアタッチして、トリガーのクエリセレクタ(または類似)と照合します。 goog.events.listenを使用してリスナーを設定し、*後でリスナーの影響を受けるべきdom要素を追加すると、これは新しい要素についてどのように知っていますか? – Mala

+0

**委任**イベントハンドラが必要です。 Closure Libraryは主にGoogleサービスで使用するためのもので、委任をサポートしていないため、その場合は自分でロールバックする必要があります。 – adeneo

答えて

0

参照として提供される次のコードをご覧ください。

通常、イベントハンドラはgoog.ui.Componentから継承されたenterDocument関数の下に置かれます。 targetEl_はダイナミックにcreateDom()内に追加され、イベントハンドラはDOMに入った後にアタッチされます。

// sample.js  
goog.provide('my.page.Sample'); 


goog.require('goog.dom'); 
goog.require('goog.ui.Component'); 

/** 
* @constructor 
* @returns {my.page.Sample} 
*/ 
my.page.Sample = function() { 
    goog.base(this); 
    this.targetEl_ = null; 
}; 
goog.inherits(my.page.Sample, goog.ui.Component); 


/** 
* Creates the DOM elements and appends to the element referred while calling render() in test.js 
* @inheritDoc 
*/ 
my.page.Sample.prototype.createDom = function() { 
    this.targetEl_ = goog.dom.createDom(goog.dom.TagName.DIV, {"class": "targetElClass"}); 
    this.setElementInternal(targetEl_); 
}; 

/** 
* Called after the components elements are known to be in the document. 
* @inheritDoc 
*/ 
my.page.Sample.prototype.enterDocument = function() { 
    goog.base(this, 'enterDocument'); 
    goog.events.listen(this.targetEl_, goog.events.EventType.CLICK, this.handleClicked_, false, this); 

}; 

/** 
* @private 
* @param {Event} event 
*/ 
my.page.Sample.prototype.handleClicked_ = function(event) { 
    // Handle the event here. 
}; 


// test.js 

goog.provide('my.page.Test'); 

goog.require('my.page.Sample'); 
test.init = function(sel) { 
    var el = document.querySelector(sel); 
    var myPage = new my.page.Sample(); 
    myPage.render(el); 
};