SORU
11 EYLÜL 2011, Pazar


Görünüm yardımcı olduğu ve Backbone.js model nesneleri

Hangi gerektiğinde model/view örnekleri imha etmek için en etkili yoldur?

Genellikle, denetleyici/yönlendirici mantığı koydum. Bu görüş oluşturulmalıdır ne karar verir, ve onlar için sağlanan ne olması gerektiğini. Genellikle, birkaç işleyici işlevleri, bir işleyici idam geldiğinde yeni bir görünüm örneklerini her zaman yaratıyorum farklı kullanıcı eylemleri veya yolları, karşılık vardır. Tabii ki, bu daha önce görünüm örneği depoluyordum ne varsa ortadan kaldırmak gerekir. Ancak, bazı görüş DOM olay işleyicileri kendilerini tutmak zaman bazı durumlar vardır ve bu durumlarda hayatta olmanın sonuçları düzgün unbinded, anlamıyorlar. Örneğin kendi el (DOM temsili) müstakil gelince görüntülemek örnekleri yok etmek için uygun bir yol olsaydı orada keşke, ya da DOM dışarı atılır

CEVAP
12 EYLÜL 2011, PAZARTESİ


doğru yolda değilsin. görüşlerinizi yaşam döngüsünü kontrol eden bir nesne olması gerekir. benim görüşüme göre bu koymak için sevmiyorum. bunun için ayrı bir nesne oluşturmak istiyorum.

yapmanız gereken şey, gerektiğinde olayları kesin. bunu yapmak için, "yakın" görüşleriniz tüm yöntem, ve her şeyin yaşam döngüsü denetleyen bir nesne kullanın her zaman yakın bir yöntemini çağırmak için. bir oluşturmak için iyi bir fikirdir

örneğin:


  function AppController(){
    this.showView = function (view){
      if (this.currentView){
        this.currentView.close();
      }
      this.currentView = view;
      this.currentView.render();
      $("#someElement").html(this.currentView.el);
    }
  }

bu noktada, eğer ki kurmak kodunuzu sadece bir örnek AppController ve her zaman arama appController.showView(...) router ya da başka bir kod ihtiyacı göstermek için bir görünüm #someElement bölümü ekrana.

(bir kullanan çok basit bir omurga uygulaması sadece bir örnek var "" (app ana bölümünde çalışan bir omurga görünümü), burada: http://jsfiddle.net/derickbailey/dHrXv/9/ ) AppView

close yöntemi bir kendine, her görünüm için oluşturmak gerekiyor, bu yüzden varsayılan görünümler mevcut değil. Her zaman yakın yöntem olması gereken iki şey vardır: this.unbind() this.remove(). eğer herhangi bir model veya koleksiyon olaylara sizin bakış bağlama Eğer bunlara ek olarak, yakın bir yöntem onları kesin.

örneğin:


  MyView = Backbone.View.extend({
    initialize: function(){
      this.model.bind("change", this.modelChanged, this);
    },

    modelChanged: function(){
      // ... do stuff here
    },

    close: function(){
      this.remove();
      this.unbind();
      this.model.unbind("change", this.modelChanged);
    }
  });

bu doğru temiz tüm yaşanan olaylardan DOM () this.remove()), tüm olayları görüntülemek kendisi olabilir yükseltmek () this.unbind()) ve olay görünümü bağlanmış bir model () this.model.unbind(...)).

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • audivila

    audivila

    5 HAZİRAN 2009
  • Bucky Roberts

    Bucky Robert

    9 HAZİRAN 2011
  • RD

    RD

    19 NİSAN 2006