2012-02-15 5 views
0

Je me demande comment attacher un écouteur d'événement à une variable ... Je sais que ça sonne super bizarre alors voici ce que je suis en train de travailler.Évaluer les événements en JavaScript?

B.viewController = function() { 
    var view = 'large'; 

    var update = function() { 
    if($(window).width() >= 481) { 
     var new-view = 'large'; 
     return view == new-view 
    } else { 
     var new-view = 'mobile'; 
     return view == new-view; 
    } 
    } 

    update(); 

    $(window).resize(function() { 
    update(); 
    }); 
}; 

maintenant je voudrais étendre ce afin que je puisse le joindre comme un écouteur d'événement ainsi par exemple que je pourrais l'utiliser pour faire quelque chose comme coolImage.bind (« B.viewController », rappel) Alors que si la vue change, le rappel est appelé sans avoir à attacher un écouteur de redimensionnement à la fenêtre ...

+1

Cela semble super bizarre ... = – gdoron

+2

Vous ne pouvez pas utiliser des tirets dans les noms de variables! – ThiefMaster

Répondre

0

Il se peut que vous souhaitiez des événements personnalisés pour effectuer le travail.

Voici un exemple:

var Publisher = {}, Subscriber = {}, EVENT_NAME = 'publisher.updated', 
    PubSub = $({}); 

Publisher.update = function() { 
    PubSub.trigger(EVENT_NAME); 
}; 

Subscriber.onUpdate = function() { 
    alert('Received update!'); 
}; 

PubSub.bind(EVENT_NAME, Subscriber.onUpdate); 
Publisher.update(); 

Publisher déclenche un événement lorsque la mise à jour est appelé, et l'abonné écoute l'événement lorsque l'événement est déclenché. En appliquant ceci à votre cas, lorsque B.viewController est mis à jour, vous pouvez appeler PubSub.trigger('view.updated') pour déclencher un événement de mise à jour. Et puis, avez coolImage écouter l'événement par PubSub.bind('view.updated', coolImage.onViewUpdated).

Crédit/Référence

+0

Il n'existe pas de mécanisme d'événement Javascript. Dans votre code, vous utilisez les fonctions 'trigger' et' bind' de jQuery avec certains messages personnalisés. –

+0

@JulianD. - Merci. Je mettrai à jour mon message pour le refléter. – DashK

0

Pour les événements sur les éléments HTML: J'écrirais une grande classe d'écouteurs. Il aurait une fonction de se lier à un élément. Cette fonction lierait les méthodes internes du Listener comme fonctions de rappel de tous les événements de l'élément, comme onload, onclick etc. Ensuite, vous instanciez le Listener pour différents types d'écouteurs, en assignant des fonctions réelles aux méthodes internes du Listener. Une autre option consiste à lier tous ces événements à une fonction de rappel unique, qui obtiendrait un seul paramètre - la description de l'événement. Si je me souviens bien, IE n'envoie pas toujours ce paramètre - si cela est vrai, vous devriez regarder window.event. Dans cette fonction, vous allez traiter tous les événements effectués. Et si vous voulez toujours discerner quel événement s'est produit, vous pouvez le faire par le type de cet objet contenant les détails de l'événement.

Pour les événements de variables: Je n'ai pas rencontré quelque chose comme ça. Il n'est pas présent dans la plupart des langages de programmation et je ne pense pas qu'il soit présent en javascript. Je suggère d'utiliser la bonne vieille pratique OOP - getters et setter. Donc, vous allez écrire a.set(x) au lieu de a = x et a.getX() au lieu de a.x et dans ces méthodes, vous pouvez gérer les changements si nécessaire.

Questions connexes