Mogę mieć nieporozumienie dotyczące implementacji pliku backbone.js, ponieważ wszystkie moje widoki obsługują wiele modeli (na przykład widok "Produkt", który może wyświetlać wiele produkty), będzie wysyłać zdarzenia do każdego widoku, który został utworzony w tej sesji.Zdarzenia Backbone.js w moich widokach wyzwalających wiele razy
Tak więc w poniższym przykładzie, po kliknięciu linku #redirect_product, "produkt przekierowania" nazywa się wiele razy w zależności od tego, ile produktów widziałem. Jeśli widziałem 5 produktów, na 6 kliknięciu dostanę 6 alertów.
Co tu się dzieje?
505 /****************PRODUCT VIEW****************/
506 App.Views.Product = Backbone.View.extend({
507 el: $('#content_sec'),
508
509 events: {
510 "click #redirect_product": "redirect_product",
511 },
512
513 initialize: function(options) {
514 this.model = this.options.model;
515 this.render();
516
517 },
518
519 render: function() {
520 $(this.el).empty();
521 $('#product_detail_template').tmpl(this.model.toJSON()).appendTo($(this.el));
522
523
524 //Activate facebook buttons
525 if (typeof FB != "undefined"){
526 FB.XFBML.parse(document.getElementById('item_share'))
527 }
528
529 wishlist.init();
530 return this;
531 },
532
533 redirect_product: function() {
534 //Send data on what product being clicked by whom
535 alert('hi');
536
537
538 //Open new window with product for user
539 var external_link = this.model.get('product').attributes['External Link'];
540 window.open(external_link, "external_site");
541
542 },
543 });
Czy identyfikator #redirect_product pojawia się wiele razy na stronie? Jeśli tak, wydaje się, że każda z tych instancji widoku produktu uzna, że musi obsługiwać zdarzenie. –
Identyfikator redirect_product pojawia się tylko raz w widoku. Jednak każdy widok produktu będzie miał jedno wystąpienie ID produktu redirect_product. Jak mogę powstrzymać inne wyświetlenia od odpowiedzi na zdarzenie kliknięcia? – DevX
Musisz przeczytać ten link: http://documentcloud.github.com/backbone/docs/todos.html. Wierzę, że twój problem leży w twoim leczeniu el. Twoje wydarzenie nie jest ograniczone do szablonu produktu. –