参照として提供される次のコードをご覧ください。
通常、イベントハンドラは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);
};
それは私が、私は理解していない[goog.events.listen](https://developers.google.com/closure/library/docs/events_tutorial) – adeneo
@adeneoです。 goog.events.listenには、リスナーをアタッチする要素が必要ですが、リスナーをドキュメントにアタッチして、トリガーのクエリセレクタ(または類似)と照合します。 goog.events.listenを使用してリスナーを設定し、*後でリスナーの影響を受けるべきdom要素を追加すると、これは新しい要素についてどのように知っていますか? – Mala
**委任**イベントハンドラが必要です。 Closure Libraryは主にGoogleサービスで使用するためのもので、委任をサポートしていないため、その場合は自分でロールバックする必要があります。 – adeneo