Read the statement by Michael Teeuw here.
jumping of modules
-
@MichMich, Could it be that this is a “fault” in the system?
-
Adding setTimeout works for the gesture up, so hiding the defaultclass. But it does not work to show the defaultclass again with gesture down. Then the screen stays black. Removal of the 2nd setTimeout results back in showing the fefaultclass again. Is it possible that it is not possible to use 2 times setTimeout in the same file or so???
Module.register("MMM-skywriter",{ // Default module config. defaults: { gesture_up: 0, gesture_right: 0, }, // Override socket notification handler. socketNotificationReceived: function(notification, payload) { if (notification === "gesture_observed"){ console.log ("socketnotificationreceived."); //self.sendNotification(notification, payload); if (payload === "up"){ if (this.config.gesture_up == 0) { MM.getModules().withClass(this.config.defaultClass).exceptWithClass(this.config.everyoneClass).enumerate(function(module) { module.hide(1000, function() { Log.log(module.name + ' is hidden.'); }); }); setTimeout(function() { MM.getModules().withClass("class_up_1_show").enumerate(function(module) { module.show(1000, function() { Log.log(module.name + ' is shown.'); }); }); }, 1000); this.config.gesture_up = this.config.gesture_up+1; console.log("gesture_up is nu 1"); } else if (this.config.gesture_up == 1) { this.config.gesture_up = this.config.gesture_up+1; console.log (this.config.gesture_up) } } else if (payload === "left"){ console.log("test - left"); } else if (payload === "down") { if (this.config.gesture_up == 1){ MM.getModules().withClass("class_up_1_show").enumerate(function(module) { module.hide(1000, function() { Log.log(module.name + ' is hidden by gesture.'); }); }); // setTimeout(function() { MM.getModules().withClass(this.config.defaultClass).exceptWithClass(this.config.everyoneClass).enumerate(function(module) { module.show(1000, function() { Log.log(module.name + ' is hidden.'); }); }); // }, 1000); this.config.gesture_up = this.config.gesture_up-1; console.log("test - down"); } else if (this.config.gesture_up == 2){ this.config.gesture_up = this.config.gesture_up-1; console.log("gesture up is terug 1"); } } } }, notificationReceived: function(notification, payload, sender) { if (notification === 'DOM_OBJECTS_CREATED') { MM.getModules().exceptWithClass("default").enumerate(function(module) { module.hide(1000, function() { Log.log('Module is hidden.'); }); }); } }, start: function() { this.current_user = null; this.sendSocketNotification('CONFIG', this.config); Log.info('Starting module: ' + this.name); } });
-
I found why it was not working:
this.config.defaultClass
does not work within thesetTimeout
. When I change it to"default"
which is what is configured in theconfig.js
, then it works perfectly.However, I need to use the
this.config.defaultClass
. So, what would be a solution for this? -
Anyone??
-
to keep your scope you need to use a fat arrow (es6) function
setTimeout(() => { MM.getModules().withClass(this.config.defaultClass).exceptWithClass(this.config.everyoneClass).enumerate(function(module) { module.show(1000, function() { Log.log(module.name + ' is hidden.'); }); }); }, 1000);