2013-03-13 3 views
2

Conceptuellement, que fait eventsApi()? Il est privé à Backbone mais utilisé dans 4 méthodes d'événements publics - on(), once(), off() et trigger().Evénements - but principal de eventsApi()?

Dans chacun d'eux, si elle renvoie une valeur non-vérité, la méthode l'appelant quittera "early".

Une chose à faire est de déterminer si la seconde partie de la méthode appelante sera exécutée. Si name n'est pas véridique ou n'est pas un type complexe (chaînes séparées par un objet ou un espace), il retournera un vrai permettant l'exécution de la seconde partie de la méthode.

Quel est l'objectif principal de la fonction eventsApi, conceptuellement, car j'ai essayé de décrire ce qu'elle fait fonctionnellement/logiquement?

eventsAPI

var eventsApi = function(obj, action, name, rest) { 
    if (!name) return true; 
    if (typeof name === 'object') { 
     for (var key in name) { 
     obj[action].apply(obj, [key, name[key]].concat(rest)); 
     } 
    } else if (eventSplitter.test(name)) { 
     var names = name.split(eventSplitter); 
     for (var i = 0, l = names.length; i < l; i++) { 
     obj[action].apply(obj, [names[i]].concat(rest)); 
     } 
    } else { 
     return true; 
    } 
    }; 

Répondre

1

Comme le commentaire dans la source dit, il met en œuvre les usages plus fantaisie de l'API des événements.

// Implement fancy features of the Events API such as multiple event 
// names `"change blur"` and jQuery-style event maps `{change: action}` 
// in terms of the existing API. 

Ainsi, lorsque vous utilisez l'API Events avec une carte de l'événement:

book.on({ 
    "change:title": titleView.update, 
    "change:author": authorPane.update, 
    "destroy": bookView.remove 
}); 

La fonction eventsApi détecte que l'entrée est un objet, et appelle on à nouveau pour chacune des propriétés transmis.

L'autre cas, il gère les événements est séparé de l'espace:

book.on("change:title change:author", ...); 

Dans ce cas, la fonction eventsApi détecte cette situation et, encore une fois, une fois pour les appels on chacun des événements transmis.

+0

[Le côlon] (http://backbonejs.org/#Events) est juste une convention utilisée pour le rendre plus descriptif. Certains événements intégrés l'utilisent. Par exemple si vous faites 'model.set ({foo: 'bar'});' backbone va déclencher 'change' et aussi' change: foo'. Mais c'est une fonctionnalité spéciale intégrée dans Backbone.Model, et vous pouvez voir dans la méthode 'set' qu'elle appelle' trigger' pour ces deux cas. De [Documentation d'événements] (http://backbonejs.org/#Events): "Si vous avez un grand nombre d'événements différents sur une page, la convention est d'utiliser des deux-points pour leur espace de nommage:" Sondage: Démarrer "ou" " changer: sélection "." –

+0

Ouais, réponse courte: c'est juste un autre caractère en ce qui concerne l'API Events elle-même. Seuls les espaces séparant 2 noms d'événements ont une signification particulière. –

+0

Il implémente simplement l'interface, rien de vraiment chic - un commentaire un peu loufoque. En fait seulement les deux choses que vous avez mentionnées, les événements séparés par l'espace, et les "cartes d'événements". –