2015-10-14 20 views
11

RESTORANIZ olmayan bir sunucu kullanarak bir Backbone koleksiyonunu kaydetme hakkında birçok gönderiye bakıyorum ve hala biraz kafam karıştı. Verilerimi, API'mize göndermek için özelleştirmem gereken toJSON yöntemini geçersiz kılan bir koleksiyon oluşturdum ("/api/entity/735/request/personDelete" şu anda jsfiddles/echo/json için değiştirildi). Ben Backbone.sync, success üzerinde kullanan bir save yöntemi oluşturdum, herhangi bir yanıt çıkarım ve nesnenin boş olduğunu, şeylerin kaybolduğu veya yanlış yaptığım şeyden emin değilim; kimse bana rehberlik edebilir mi? Bu örneği çalışır hale getirmek isterim, böylece böyle bir şeyi ileriye taşımak için kullanabilirim.Backbone: Tüm koleksiyonu RESTORİ olmayan bir sunucuya kaydetme

JS

var PersonCollection = Backbone.Collection.extend({ 
    model: PersonModel, 

    url: function() { 
     // Dummy JSFiddle endpoint 
     // Example non-RESTful url "/api/entity/735/request/personDelete" 
     return '/echo/json/'; 
    }, 

    /** 
    * Override toJSON to loop through collection models making 
    * custom objects containing specific attributes to be posted. 
    */ 
    toJSON: function() { 
     console.log(this.models); 

     var plucked = this.models.map(function(model) { 
      return _.pick(model.toJSON(), ["id","name", "teams"]) 
     }); 

     console.log(plucked); 
     return plucked; 
    }, 

    save: function(options) { 
     Backbone.sync('create', this, { 
     success: function(data, textStatus, jqXHR) { 
      console.log('Saved!', data); 
     } 
     }); 
    } 
}); 

JSFiddle:http://jsfiddle.net/kyllle/f1h4cz7f/3/

+0

Plase çek beklendiği gibi parametrelerin geçirilmesi (ki sanmıyorum) ve bir 2xx yanıt almak. Lütfen gönderinizi düzenleyin ve isteğin nasıl görüneceğini belirtin (ör. Form kodlu veya uygulama/json vb.). O olayın Backbone.sync() 'inin ihtiyaçlarınız için uygun olmadığını söyleyebilirim. Muhtemelen '$ .ajax() 'ı doğrudan' save() 'olarak kullanmak istersiniz, ya da o" standart olmayan "REST API ile iletişim kuran daha fazla modeliniz ve koleksiyonunuz varsa,' Backbone.sync'in üzerine yazmak isteyebilirsiniz.() 'yerine. –

+0

Bu benim sorunumun bir parçası, şu anda, parametreleri nereye geçirmem gerektiğinden emin değilim, bu yüzden kaydetme etkili bir şekilde çalıştırılabilir mi? – styler

+1

Gerçekten koleksiyondaki her şeyi kurtarmaya mı çalışıyorsunuz? Arka ucun RESTful olmadığını söylemiştin, ama arka ucun ne bekliyor? ve jsonu nasıl bekliyor? –

cevap

7

Bunu size yardım etmezse sync söylemeye kendini zorlamak gerekmez. sync, ortak senaryolarda zamandan tasarruf etmenizi sağlar.

annotated sync code'da gördüğünüz gibi, sonuç olarak yalnızca jQuery.ajax numaralı telefonu arar ve RESTful arka uçlarıyla ilgili yardım için mantığı içerir.

Ayrıca (bazı olayları, siz ya (istek yapıldığı) request ve sync (istek başarıyla tamamlandı) veya error gibi uygulamanızda diğer bölgelerinde dinlemek olabilir veya olmayabilir tetikler eğer istek

sync yeniden icat edilmezse, tüm bunları uygulamanızdan yapabilirsiniz.

Verilerinizi hazırlayın, verilerinizi arka ucunuza ve isteğe bağlı olarak trigger omurga olaylarına göndermek için arayarak $.ajax numaralı telefonu arayın.

+0

Evet anlıyorum ama ben bu oldukça bir yorumdur daha güzel bir şekilde – styler

0

Koleksiyonunuzu bir omurga modeli içine sarabilirsiniz. Omurga olarak

var CollectionWrapper = Backbone.Model.extend({ 
    url: "/echo/json" 
}); 

ve sonra kullanabilirsiniz model.save() ve/veya Backbone.sync() kullanılabilmesi niyetinde.

bu yanıta bakın: isteğinde bulunulursa, "How" to save an entire collection in Backbone.js - Backbone.sync or jQuery.ajax?

+0

bunu yapmak toJSON ve eşleştirmeyi birleştirmek diye düşündüm. Bunun dışında, OP omurga prensibini uymayan (DİNLENME) API'leri nasıl başa sorar. O 've' "/ API/varlık/735/istek/personDelete" 'daha fiil (eylem) benzeyen URL bileşenleri tarafından yansıtılır, HTTP-fiilleri tarafından "olmayan bir RESTful sunucusu"' diyor. Ben OP zaten o() 'veya' senkronizasyon() '' geçersiz kurtarmak zorunda ama bunun nasıl emin değildir/sn fark sanırım. –

İlgili konular