PHP rocks! wünscht allen Mitgliedern einen guten Rutsch ins neue Jahr 2017 !!!
Hinweis: Das Forum zieht um! Um keine Datenverluste zu haben, schalten wir zwecks Übernahme der Daten das Forum am Sonntag, den 24.04.2016 um ca. 21:00 Uhr offline und passen anschliessend die DNS-Einträge an.
www.php-rocks.de wird euch dann nach den Aktualisierungen der DNS-Server wieder wie gewohnt uneingeschränkt zur Verfügung stehen.
Danke für euer Verständnis!

Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
EventEmitter.once is fired twice
#1
Hallo,
Auszug aus meinem EventEmitter:
Code:
EventEmitter.prototype.once = function (event, listener) {
    this.on(event, function g () {
        this.removeListener(event, g);
        listener.apply(this, arguments);
    });
  };

und app.js...
Code:
var BootConfigLoadEvent = new EventEmitter();
          
        
        BootConfigLoadEvent.once('bootconfig', function(){
               var c = arguments[0].config;
               var themes = frdl.SQL
                                .from(c.themes)
                                .where("$.enabled == true")
                                .toArray();
                               
               frdl.each(themes, function(i,theme){
                   $('div[data-webkit-mod="themes"]').append(
                      '<div data-frdl-component="'+theme.url+'"></div>'
                   );
               });      
               webfan.$Async(function(){  
                  gui.ready.emit('theme loaded', $scope);
               },1000);
               
             
              webfan.$Async(function(){          
               var components = frdl.SQL
                                .from(c.components)
                                .where("$.enabled == true")
                                .toArray();
                               
               frdl.each(components, function(i,component){
                   $('div[data-webkit-mod="components"]').append(
                      '<div data-frdl-component="'+component.url+'"></div>'
                   );
               });    
              },1);  
               
                 
             webfan.$Async(function(){          
               var desktopwidgets = frdl.SQL
                                .from(c.desktopwidgets)
                                .where("$.enabled == true")
                                .toArray();
                               
               frdl.each(desktopwidgets, function(i,component){
                   $('div[data-webkit-mod="components"]').append(
                      '<div data-frdl-desktop-widget="'+component.url+'"></div>'
                   );
               });  
              },1);  
               
                                         
       });

...und...
Code:
var b = function(){
            
                        BootConfigLoadEvent.emit('bootconfig', {
                            config : $scope.manifest,
                            time : new Date().getTime()
                        });    
                        
            b = function(){};
                                
        };

Die Funktion welche in .once oben deklariert ist wird mehr als einmal ausgeführt.
Wie kann das sein?
Ich "lösche" wie im Code zu sehen sogar den Wrapper b(), trotzdem wird das ganze mehrmals ausgeführt, nämlich immer dann wenn sich der state (angularJS ui.router) ändert (das ganze befindet sich in einer angular config function)!?
Antworten
#2
Mh...
Im settings html template wurde der SettingsController über das template html erzeugt.
Ich habe nun dies aus dem settings template entfernt und den controller um den view gewrappt:
Code:
<div ng-controller="settingsCtrl as settingsCtrlInstance" ng-cloack>

<div ng-controller="browserCtrl as browserCtrlInstance" class="view-screen">
              
     <div ui-view="startView" data-flow-mod="tab" autoscroll></div>
     <div ui-view="internalView" data-flow-mod="tab" autoscroll></div>

    
     <div ui-view="installView" data-flow-mod="tab" autoscroll></div>
     <div ui-view="installSubView" data-flow-mod="tab" autoscroll></div>
  
</div>

</div>
Die scheint zwar das Problem zu beheben, überzeugt mich aber nicht so ganz, weil hier ein Controller um seinen html state view gewrappt ist?
Antworten


Gehe zu: