2011-06-19 3 views
5

birden çok kez tetikleme ediliyor ürünler), o oturumda oluşturulan her görünüme olay gönderir. Ben #redirect_product bağlantıyı tıkladıklarında Yani aşağıdaki örnekte backbone.js olaylar nedeniyle örneğin, bir "Ürün" görünümü birden fazla gösterebilmesi (birden modellerini destekleyen görüşlerimi tüm, backbone.js nasıl uygulanacağına ilişkin bir yanlış anlama olabilir

, "redirect_product" i gördüm kaç ürün bağlı birden çok kez denir. Eğer 5 ürünü incelediysem, 6. tıklamada 6 uyarı alacağım.

Neler oluyor burda? Benim Uygulamada itibaren

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  }); 
+2

#redirect_product kimliği sayfada birden çok kez görünüyor mu? Öyleyse, bu ürün görünümü örneklerinin her biri olayı ele almaları gerektiğini düşünür. –

+1

redirect_product kimliği yalnızca görünümde bir kez görünür. Bununla birlikte, her ürün görünümünde redirect_product kimliğinin bir örneği bulunur. Diğer görüntülemelerin tıklama etkinliğine yanıt vermesini nasıl engelleyebilirim? – DevX

+0

Bu bağlantıyı incelemeniz gerekir: http://documentcloud.github.com/backbone/docs/todos.html. Senin sorununun elinizin tedavisinde olduğuna inanıyorum. Etkinliğiniz ürün şablonuna göre belirlenmemiş. –

cevap

8

sorun, bence, senin bütün görüşleriniz için aynı el kullanarak olmasıdır.

Yeni Ürün oluşturmak

, böyle bir şey yapmak: Her ürünün kendi kapsamı vardır

$('#content_sec').append('<div class="productView"></div>'); 
var product = new Product(); 
var view = new ProductView({model: product, el: $('.productView:last')}); 

kez beklendiği gibi, daha sonra olaylar çalışacaktır.

3

Çoklu model ile görüş işlemek için en iyi yolu görünümleri iki tür için: (a model olarak Koleksiyonu ile)

  • ebeveyn görünümü - <ul>
  • olarak düşünmek (koleksiyonundan Modelleri ile)
  • çocuk görünümleri - Ebeveyniniz görünümü tüm alt görünümleri oluşturur ve toplama merkezleri gözlemler <li>

olarak düşünmek tion değişir.

çocuk görüş her li elemanına kapsamını sınırlar, böylece bir modeli (kendi bakış) her olay ayrı ayrı ele alınmıştır.

Bu temizleyici bakımı daha kolay ve model-view ilişkiyi daha iyi bilgi verir.

1

bir sınıf ".redirect_product" ile kimliği "#redirect_product" Değiştir Sonra sayfada birçoğu olabilir.

Çoğu zaman omurga görünümlerinde sadece sınıfları kullanırım. Çok nadiren kimliği. omurga sadece görünümde kapsamında arar sınıf da görüş kapsamı dışında başka bir öğe üzerinde mevcut ise çok fazla bakım gerekmez bir bulucu

this.$(".redirect_product") 

sahip olduğu göz önüne alındığında.