SORU
30 HAZİRAN 2011, PERŞEMBE


İçinde Backbone.js nasıl iç içe geçmiş Modeller yaklaşımı

Aşağıdaki JSON bir sunucudan sağlanan var. Bu, iç içe geçmiş bir modeli ile bir model oluşturmak istiyorum. Bunu sağlamanın yolu ise emin değilim.

//json
[{
    name : "example",
    layout : {
        x : 100,
        y : 100,
    }
}]

Bu aşağıdaki yapıda iç içe iki omurga modelleri dönüştürülmesini istiyorum

// structure
Image
    Layout
...

Yani Düzen modeli tanımlayın:

var Layout = Backbone.Model.extend({});

Ama iki (varsa) teknikleri aşağıda Resim modeli tanımlamak için kullanılır? Ya da bir B aşağıda?

Bir

var Image = Backbone.Model.extend({
    initialize: function() {
        this.set({ 'layout' : new Layout(this.get('layout')) })
    }
});

ya da,B

var Image = Backbone.Model.extend({
    initialize: function() {
        this.layout = new Layout( this.get('layout') );
    }
});

CEVAP
28 Mart 2012, ÇARŞAMBA


Omurga başvurum ben yazarken çok aynı sorun var. Sahip gömülü/iç içe geçmiş modeller ile başa çıkmak için. Oldukça zarif bir çözüm olduğunu düşündüğüm bazı düzenlemeler yaptım.

Evet, ayrıştırma yöntemi bir öznitelik etrafında nesneyi değiştirmek için değiştirebilirsiniz, ama hepsi de gerçekten çok unmaintainable code IMO, ve bir çözüm daha kesmek daha çok hissediyor.

Senin örneğin benim önerim şu:

İlk böyle Düzen Modeli tanımlayın.

var layoutModel = Backbone.Model.extend({});

Daha sonra burada resim modelinizin:

var imageModel = Backbone.Model.extend({

    model: {
        layout: layoutModel,
    },

    parse: function(response){
        for(var key in this.model)
        {
            var embeddedClass = this.model[key];
            var embeddedData = response[key];
            response[key] = new embeddedClass(embeddedData, {parse:true});
        }
        return response;
    }
});

Model kendini tahrif var dikkat edin, ama sadece ayrıştırma yöntemi, istenen nesne arkaya verin.

Bu sunucudan okurken iç içe modeli yapısını sağlamalıdır. Şimdi, tasarruf veya ayarı aslında iç içe geçmiş modeli açıkça uygun modeli kullanarak ayarlamak için anlamlı olduğunu hissediyorum çünkü burada işlenmiyor olduğunu fark ederdi.

Bunun gibi

image.set({layout : new Layout({x: 100, y: 100})})

Ayrıca gerçekten çağırarak, iç içe geçmiş modeli ayrıştırma yöntemi çağırma unutmayın:

new embeddedClass(embeddedData, {parse:true});

İhtiyacınız olduğu model alanında çok iç içe geçmiş modeller tanımlayabilirsiniz.

Eğer kendi masa iç içe modeli tasarruf kadarıyla gitmek istiyorsan tabii. Bu yeterli olmaz. Ama okuma ve bir bütün olarak nesne kaydetme durumunda, bu çözüm yeterli olacaktır.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Abe Olandres

    Abe Olandres

    16 EYLÜL 2006
  • Chaoticmoogle

    Chaoticmoogl

    13 ŞUBAT 2006
  • superflyy88

    superflyy88

    8 ŞUBAT 2009