2013-08-22 2 views
1

J'ai une collection Jours effectivement partagés par 2 collections - collection vue v1 pour ajouter ou supprimer des jours (modifier) ​​et la vue composite v2 qui affiche des liens cliquables pour naviguer vers les itemsViews du jour individuel.L'objet Application déclenche deux fois un événement personnalisé? Marionette v1.1.0

AppointmentManager = new Marionette.Application //app object. 
//sharing collection days among two views v1, v2. 
var days = new Entities.Days(ApptModel.get("apptDays")); 
var v1 = new EditCollectionView({collection: days}); 
var v2 = new ListCompositeView({collection: days}); 

Pour supprimer dire des rendez-vous pour le jour 2, l'utilisateur clique sur le bouton Supprimer dayItemView2 dans CollectionView v1, ce qui provoque aussi le jour à supprimer de la vue de la collecte v1, comme ceci:

onDeleteDayClicked() { 
    this.model.collection.remove(this.model); 
} 

Cette suppression est également reflétée dans la vue v2, car la collection est partagée entre ces deux vues. Le lien de navigation du Jour 2 est automatiquement supprimé de v2 par Marionette.

La collection Days est à l'écoute de cet événement remove lors de l'initialisation. Pour faire en sorte que ces changements sont reflétés et sauvegardés Serverside (ainsi que d'autres bits d'informations stockées dans le cadre du plus grand modèle qui stocke également la collecte de jours), je déclenche le gestionnaire d'application d'un événement sauver:

Entities.Days = Backbone.Collection.extend({ 
       initialize: function(options) { 
        this.on("remove", function(model,collection,index) { 
          AppointmentManager.trigger("appts:save"); 
      } 
}); 

Cependant dans mon ApptController, je reçois deux fois l'appli: save event. J'ai vérifié que la collection Days ne reçoit qu'un seul événement delete et qu'un seul modèle est supprimé, donc appts: save trigger est appelé ones. "Appels d'épargne" est imprimé deux fois et appose deux fois!

Des indices ?!

Utilisation de Marionette v1.1.0. J'ai d'autres modules et applications qui affichent l'en-tête navbar et d'autres pages. Ma structure d'application est basée sur Backbone.Marionette.js: A Gentle Introduction par David Sulc - bien que je doute que cette structure d'empaquetage soit d'aucune pertinence à ce problème.

+0

Avez-vous essayé de placer un point d'arrêt dans le ' 'appts: gestionnaire d'événements dans save''' ApptManager'? Il serait instructif de savoir si/comment la pile d'appels semble différente pour les deux appels. –

+0

La pile d'appels est la même. –

+0

Avez-vous essayé la suggestion de @ Tigra d'ajouter 'console.log ('init')' à 'initialize'? J'ajouterais aussi un au gestionnaire 'remove', pour voir si initialize et/ou le callback est appelé 2x. –

Répondre

-1

Comment exactement partagez-vous votre collection?

Ajouter journal de la console à votre collection initialiser
méthode probablement Initialisez appelé deux fois

+0

voir la modification ci-dessus montrant comment la collection est partagée. –

+0

semble ok, mais de toute façon, essayez de sortie à la console de votre collection initialiser ... voir combien de fois il est appelé – Tigra

Questions connexes