9
votes

Backbone événement click ne pas tirer sur la vue dynamique

J'ai une vue épine dorsale qui crée une nouvelle div pour chaque modèle qui est passé en elle. Cependant, je ne peux pas obtenir toute sorte d'événements à feu (cliquez sur a.change statut) sur la vue et je suppose que c'est parce que les éléments à l'intérieur de celui-ci sont également générées à partir d'un modèle. S'il vous plaît laissez-moi savoir s'il y a une façon de contourner ce

<script id="single-video-tmpl" type="text/x-jquery-tmpl">
<div>
    <div class="video-info">
        <span class="video-title"><%=video_title%></span>
        <div class="bottom-info">
            <a href="#<%=id%>" class="change-status"></a>
        </div>
    </div>

</div>
</script>


10 commentaires

el vous définissez n'a pas de sens, il devrait être un jquery comme sélecteur ( api.jquery.com/category/selectors ).


Je l'avoir créer un div pour chaque modèle


Oh, ça marche? Je ne l'ai jamais vu utilisé comme ça pour être honnête, désolé.


C'est bon. Oui, il fonctionne très bien de cette façon en fonction de ce que vous essayez d'accomplir.


Je pense que ce pourrait être parce que l'élément est créé uniquement après avoir initialisé. Ainsi, lors de l'initialisation (où événements est analysée) il ne peut pas lier les événements de clic à tout élément dans le DOM.


Oui, c'est ce que je supposais. Je suppose qu'il doit y avoir un moyen de contourner, la réponse ci-dessous semble que ce serait la solution, mais il ne fonctionne pas


où vous mettez this.delegateEvents () exactement?


J'ai essayé de le mettre dans la fonction après le code html rendu a été ajouté


Avez-vous un jsFiddle avec cela?


Votre a en fait vide lorsque vous le rendre? Essayez: texte ici .


4 Réponses :


12
votes

Essayez un this.delegateEvents () après avoir rendu le nouveau contenu.


1 commentaires

J'ai essayé d'ajouter que et il ne semble pas quoi que ce soit le changement :(



8
votes

Il y a des choses qui pourraient être la cause du problème.

Tout d'abord, votre el code> déclaration semble être suspect. Si vous voulez un div avec cette classe il vous suffit de définir le className code> depuis la valeur par défaut pour les vues de squelette est div code> p>

Au lieu de:. el: '

code> p>

il suffit d'utiliser: className: 'fournisseur-vidéo' code> p> Je ne vois pas de détails sur votre vue des méthodes d'initialisation, mais la meilleure pratique est d'initialiser une vue puis rendre au conteneur: p>

$("#your-video-container").html(yourVideoDivView.render().el)
yourVideoDivView.delegateEvents();


2 commentaires

donc si je lance div déclencheur (clic) el.find $ ( 'a.change-statut').. juste après delegateEvents () il tire, mais sinon, si je clique sur ce ne sera pas le feu. Pensez-vous que cela pourrait avoir à faire avec que cela est enveloppé dans un ou deux autres points de vue? Il est enveloppé dans une vue videoSet qui est ensuite enveloppé dans une vue plus grande. Est-ce que cet effet cela?


Nevermind, je devais rendre le parent voir la même façon que ci-dessus, merci!



1
votes

J'ai eu un problème similaire. Vous pouvez résoudre ce problème en deux étapes.
- Création d'une vue en tagName
- Append votre modèle dans ce el $
. C'est tout. Et ça marche sans this.delegateEvents ()


0 commentaires

0
votes

La question que je remarquai avec tagName et en utilisant ce annexant. El est $, l'écouteur d'événement n'a pas joindre l'événement pour le dernier élément créé avec tagName sélectionné. Mais, le problème se est résolu lors de l'utilisation this.delegateEvents () après les éléments annexant DOM.


0 commentaires