SORU
3 AĞUSTOS 2011, ÇARŞAMBA


Birden çok Model sınıflarını Backbone.js bir Koleksiyon

Bir liste döndüren bir API Json DİNLENMEM lazım"". seyir defteri Farklı ama benzer davranışı uygulayan seyir birçok türü vardır. Veritabanı katmanı üzerinde bu sunucu tarafı uygulaması bir seyir defteri her JSON temsilini içeren Tek Tablo Devralma bir tür, "type" :

[
  {"type": "ULM", "name": "My uml logbook", ... , specific_uml_logbook_attr: ...},
  {"type": "Plane", "name": "My plane logbook", ... , specific_plane_logbook_attr: ...}
]

İstemci tarafında bu sunucu modeli çoğaltmak istiyorum, tabanı Logbook sınıf ve alt sınıflar seyir defteri birden fazla var :

class Logbook extends Backbone.Model

class UmlLogbook extends Logbook

class PlaneLogbook extends Logbook

...

8* *benim JSON API sorgu için kullandığım Logbook modeller kümesidir :

class LogbookCollection extends Backbone.Collection
  model: Logbook
  url: "/api/logbooks"

Seyir defteri koleksiyonu getireyim, ilgili alt sınıfa Logbook her döküm için bir yolu var ("" özniteliği) tür ? JSON dayalı

CEVAP
3 AĞUSTOS 2011, ÇARŞAMBA


Gerçekten de var.

Ara 'yakala' koleksiyonu, Omurga ile yanıt geçirir.Toplama.koleksiyona eklemeden önce ayrıştırmak.

Varsayılan uygulama 'ayrıştırma' yanıtı geçer, ama bu modellerin listesi koleksiyonuna dönmek için geçersiz kılabilirsiniz:

class Logbooks extends Backbone.Collection

  model: Logbook

  url: 'api/logbooks'

  parse: (resp, xhr) ->
    _(resp).map (attrs) ->
      switch attrs.type
        when 'UML' then new UmlLogbook attrs
        when 'Plane' then new PLaneLogbook attrs

EDİT: oha, idbentley benden önce davrandı. tek fark o kullanılan 'her' Ve ben ''. göster Hem çalışır, ama farklı.

Kullanarak 'her' etkili sonları zinciri olan 'yakala' arama başlattı (dönen 'tanımsız' - sonraki çağrı için 'reset' (veya 'ekle') Bu nedenle yapacak bir şey yok) ve yaptığı her işlem orada ayrıştırma işlevi.

Kullanarak 'göster' sadece modeller listesinin içinde öznitelikler listesi, dönüşümler ve zinciri geri çoktan harekete geçirir.

Herkesin farklı zevkleri var.

TEKRAR EDİT: ben de sadece bunu yapmak için başka bir yol olduğunu fark etti:

'Model' bir koleksiyon özniteliği sadece toplama eğer geçti ise yeni bir model yapmak için nasıl bilir nitelikleri var'', '' veya 'reset'. oluştur Ekle Bir şey istersin diye

class Logbooks extends Backbone.Collection

  model: (attrs, options) ->
    switch attrs.type
      when 'UML' then new UmlLogbook attrs, options
      when 'Plane' then new PLaneLogbook attrs, options
      # should probably add an 'else' here so there's a default if,
      # say, no attrs are provided to a Logbooks.create call

  url: 'api/logbooks'

Bu avantajı koleksiyonu şimdi nasıl bilecek 'dökme' operasyonları dışında Seyir defteri sağ alt '' getir.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • LatinNinja99

    LatinNinja99

    28 EKİM 2011
  • MrOctopi

    MrOctopi

    6 Aralık 2010
  • Truc Minh

    Truc Minh

    23 Ocak 2011