5 votes

backbone.js déclenche des événements dans render()

Je me lie à certains événements dans le render de backbone.js, et plus précisément d'une fonction click Cependant, je n'arrive pas à le faire fonctionner.

J'ai une installation similaire (mais très simplifiée) :

App.ProductView = Backbone.View.extend({

className: 'title_products_tab',
el: $('.title_products_tab'),

events: {
    'click .product_list .edit_product' : 'edit',

Pour la section des événements de ma vue dorsale. Au sein de la fonction de rendu, je souhaite déclencher la fonction bound .edit_product click événement :

render: function(){
        console.log($._data( $('.title_products_tab .product_list .edit_product')[0], "events" ));
        $('.title_products_tab .product_list .edit_product').trigger('click');

Ce qui ne fonctionne pas, le _data pour l'élément est indéfini, mais je sais que l'événement fonctionne car le reste de ma vue fonctionne en conséquence. Je ne parviens pas à déclencher des événements dans render ou n'importe où ailleurs au démarrage.

J'ai pensé :

this.trigger('click .product_list .edit_product');

Cela pourrait fonctionner, mais là encore, pas de chance.

J'ai aussi entendu parler de bindAll mais j'ai entendu dire que ce n'était pas une bonne idée de l'utiliser.

Alors comment, ou plutôt quand, déclencher des événements de démarrage pour ma vue dorsale ?

2voto

Loamhoof Points 6095

Vous pouvez donc trouver ceci intéressant (note : le code de Backbone) :

var View = Backbone.View = function(options) {
  this.cid = _.uniqueId('view');
  this._configure(options || {});
  this._ensureElement();
  this.initialize.apply(this, arguments);
  this.delegateEvents();
};

Surtout la dernière partie. Les événements sont liés après la méthode initialize est appelée, donc après que votre méthode render soit appelée. Les événements ne sont pas encore liés.

(Je suppose que vous pourriez appeler manuellement delegateEvents si vous devez vraiment procéder comme vous le faites)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X