SORU
15 HAZİRAN 2011, ÇARŞAMBA


backbone.js yapılanma görüşler ve modeller iç içe

Backbone.js kullanarak:

2 öznitelikleri ve 2 iç içe geçmiş modeller içeren üst düzey bir ModelA, ModelB ve ModelC var. ModelB ve ModelC her şöyle: 2 milyon kullanıcı var

ModelA
    attributeA1
    attributeA2
    ModelB
        attributeB1
        attributeB2
    ModelC
        attributeC1
        attributeC2

ModelA ve ModelB için burada viewa seçer viewa bir Görüşler var. Görüşler vermek işlevi burada viewa seçer viewa vermek bir h1 oluşturur iken vücut üzerine yeni bir div yerler. Görüşler başlatma burada viewa seçer viewa bu hale h1 yeni div içine eklemek için çağırır. Bu ayırma mantığı h1 değişim ve yeniden işleme Görüşler bağımsız gerektirebilir.

ViewA
    initialise: 
        //call ViewA's own render function
        this.render() 

        //call ViewB's render function that further modifies the $("#new") div created earlier.
        $("#new").append(ViewB.render().el)

    //ViewA's own render function
    render: //place <div id="new"></div> onto 'body'

ViewB
    render: //create a <h1></h1>
    funcB1: //can this access it's parent ModelA's attributes and other objects?

S1: burada viewa seçer viewa bir işlev funcB1 vardır. Bu ana model öznitelikleri erişim fonksiyonu olabilir? AttributeA1 veya attributeC1 kardeş/kuzen) gibi özelliklere de.

S2: S1, funcB1 erişmek için daha fazla bir genişleme Olarak DOM elemanları Görüşler? ile ilgili (bu örnekte, #new div?)

S3: genel Olarak, nasıl her şeyi birbirine bağlar, böylece yukarıda açıklandığı gibi Görüş ve Modeller arasındaki ilişkileri düzgün tanımlayabilirim?

Bu soru biraz soyut olduğunun farkındayım ama herhangi bir yardım takdir veya kuralların takdir.

CEVAP
25 HAZİRAN 2011, CUMARTESİ


İlgili modeller üzerinde öznitelikleri ulaşabilmek için, bu model ile ilgili bilgi ne çeşit olması gerekir. Backbone.js örtülü olarak kendinizi modelleri birbirleri hakkında bilgi sahibi olduğundan emin olun gerektiği anlamına gelir ilişkiler veya iç içe geçmiş, başa gelmez. Sorularınızı cevaplamak için, bu konuda gitmek için bir yol her çocuk model olduğundan emin olmak için bir 'ana' özniteliği. Bu şekilde geçiş yerleştirme ilk ana kadar ve bildiğiniz herhangi bir kardeş için aşağı.

Sorularınızı daha spesifik olmak. ModelA başlatırken, muhtemelen modelB oluşturup, bunu yaparken üst model bir bağlantı ayarı öneririm, bu gibi modelC:

ModelA = Backbone.Model.extend({

    initialize: function(){
        this.modelB = new modelB();
        this.modelB.parent = this;
        this.modelC = new modelC();
        this.modelC.parent = this;
    }
}

Bu şekilde bu çağırarak, herhangi bir alt model işlevi üst model ulaşabilirsiniz.üst.

İç içe omurga görüş yaparken görüş ile ilgili olarak, daha kolay, her görünüm, bakış tagName seçeneğini kullanarak bir HTML etiketi temsil etsin. Bu gibi düşüncelerinizi yazmak istiyorum:

ViewA = Backbone.View.extend({

    tagName: "div",
    id: "new",

    initialize: function(){
       this.viewB = new ViewB();
       this.viewB.parentView = this;
       $(this.el).append(this.viewB.el);
    }
});

ViewB = Backbone.View.extend({

    tagName: "h1",

    render: function(){
        $(this.el).html("Header text"); // or use this.options.headerText or equivalent
    },

    funcB1: function(){
        this.model.parent.doSomethingOnParent();
        this.model.parent.modelC.doSomethingOnSibling();
        $(this.parentView.el).shakeViolently();
    }

});

Uygulama başlatma kodunuzu (kumanda gibi), Görüşler başlatmak ve body öğesi içinde öğesi yer olurdu o zaman.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Alfredo Garcia

    Alfredo Garc

    25 Mayıs 2007
  • Matt Harding

    Matt Harding

    23 Mayıs 2006
  • The Pet Collective

    The Pet Coll

    5 Ocak 2012