2010-06-13 22 views
1

J'utilise scriptaculous Builder pour générer dynamiquement des éléments DOM, et l'un d'entre eux est une balise link. Je ne savais pas comment générer ceci avec le rappel de clic en ligne avec le reste du code Builder, donc je génère la balise de lien à l'avance et l'insère ensuite avec le reste de la phase Builder.Observer l'événement 'click' sur <a> tag généré par scriptaculous Builder

Le problème est que le rappel pour le lien n'est jamais réellement exécuté lorsque je clique sur le lien, et la barre d'adresse URL change à http://localhost/foo/bar/# à la place. La méthode de rappel fait partie de ma classe, donc je la lie en tant qu'écouteur d'événements à l'avance.

var Foo = Class.create ({ 
    initialize: function() { 
     this.closeBinding = this.doClose.bindAsEventListener (this); 
    }, 
    generate: function() { 
     /* Create the link and bind the click listener */ 
     var close_link = Builder.node ('a', { href: '#' }, 'Close'); 
     Event.observe (close_link, 'click', this.closeBinding); 

     /* Generate the new DOM nodes */ 
     return Builder.node ('div', [ 
      Builder.node ('h2', 'This is a test'), 
      close_link 
     ]); 
    }, 
    doClose: function (evt) { 
     /* This code is never called when I click the link. */ 
    } 
}); 

Répondre

1

Donc, j'ai découvert le vrai problème. En fait, je ne faisais rien de mal en ce qui concerne la façon dont j'observais l'événement, mais j'ai omis un détail qui ne semblait pas pertinent mais apparemment pertinent. Le code DOM que je génère est quelque chose qui est inséré dans une Modalbox [1], et apparemment ce script interfère avec ma liaison d'événement ou quelque chose comme ça. Le lien qui observe une fonction sur 'ceci' était confus car apparemment 'ceci' faisait référence à la Modalbox, et pas à mon objet Foo. Donc ma solution était peut-être un peu moins qu'idéale, mais j'ai trouvé une autre façon d'accéder aux données qui étaient dans 'ceci', et donc la liaison d'événement n'est pas dans mon chemin maintenant.

[1]. http://okonet.ru/projects/modalbox/