What is a Google Closure solution to solve problems with the this in JavaScript callback functions. That would be so useful in OO style programming.
Are there any conventions or style for OOP in Google Closure ???
Upgrade How can I get access to this.darklayer handler ViewportSizeMonitor ???
goog.require('goog.dom'); goog.require('goog.events'); goog.require('goog.events.EventType'); goog.require('goog.math.Size'); goog.require('goog.style'); goog.require('goog.dom.ViewportSizeMonitor'); goog.provide('ehsun7b.ajax.AjaxBox'); ehsun7b.ajax.AjaxBox = function (url, containerClass) { try { this.url = url; this.containerClass = containerClass; var viwportSize = goog.dom.getViewportSize(); this.darklayer = goog.dom.createDom("div", { "style": "width: " + viwportSize.width + "px;" + "height: " + viwportSize.height + "px;" + "background-image: url('css/img/50black.png');" + "z-index: 1000;" + "position: absolute;" + "left: 0px; top: 0px;" }); var vsm = new goog.dom.ViewportSizeMonitor(); goog.events.listen(vsm, goog.events.EventType.RESIZE, function(e) { console.log("this: " + this.darklayer); }); this.container = goog.dom.createDom("div", { "class": this.containerClass }); goog.dom.appendChild(this.darklayer, this.container); goog.dom.setTextContent(this.container, "hello ajax box"); this.show = function() { goog.dom.appendChild(document.body, this.darklayer); }, this.hide = function() { goog.dom.removeNode(this.darklayer); } } catch (e) { console.log("error: " + e); } };
I changed my class according to the Closure style as follows:
goog.require('goog.dom'); goog.require('goog.events'); goog.require('goog.events.EventType'); goog.require('goog.math.Size'); goog.require('goog.style'); goog.require('goog.dom.ViewportSizeMonitor'); goog.provide('ehsun7b.ajax.AjaxBox'); ehsun7b.ajax.AjaxBox = function (url, containerClass) { try { this.url = url; this.containerClass = containerClass; var viwportSize = goog.dom.getViewportSize(); this.darklayer = goog.dom.createDom("div", { "style": "width: " + viwportSize.width + "px;" + "height: " + viwportSize.height + "px;" + "background-image: url('css/img/50black.png');" + "z-index: 1000;" + "position: absolute;" + "left: 0px; top: 0px;" }); var vsm = new goog.dom.ViewportSizeMonitor(); goog.events.listen(vsm, goog.events.EventType.RESIZE, function(e) { console.log("this: " + this.darklayer); }); this.container = goog.dom.createDom("div", { "class": this.containerClass }); goog.dom.appendChild(this.darklayer, this.container); goog.dom.setTextContent(this.container, "hello ajax box"); } catch (e) { console.log("error: " + e); } }; ehsun7b.ajax.AjaxBox.prototype.show = function() { goog.dom.appendChild(document.body, this.darklayer); } ehsun7b.ajax.AjaxBox.prototype.hide = function() { goog.dom.removeNode(this.darklayer); }
source share