2013-08-23 18 views
5

Bir kullanıcının farklı Omurga koleksiyonu modelleri arasında geçiş yaparken kaydedilmemiş değişiklikler hakkında bir kullanıcıyı "nag" yapma gereksinimim var (bir tablo satırına tıklayarak). "Omurga modeli kirli verilerini kontrol et" (örneğin) için googled ve kesin bir şey bulunamadı. Koleksiyondaki kirli herhangi bir omurga modeli verilerinin kontrol edilmesi

Bu Aşağıdaki gibi bir şekilde, underscore's "some" ve isEqual functionality kullanılarak gerçekleştirilebilir, "bazı()" (o kesin değişiklikler ne olabileceğini aksine) herhangi un-kaydedilmiş değişiklikler olup olmadığını belirlemek için yeterli olmaktan Özellikle de model niteliği aslında bir dizi nesneden ibaret olduğu için.

var anyDirty = _.some(myCollection.models, function(model) { 
    return !_.isEqual(model.get('nodes'), model.previousAttributes()['nodes]); 
}); 

Ben omurga için yeni ve bu kirli modeli verileri kontrol AdHoc için yaklaşımın kabul edilen bir tür olup olmadığını merak ediyorum. Ya da, Backbone bu amaç için bir çeşit yerleşik işlevsellik sağlar, benim ilk girişimlerimi ortaya çıkarmadı mı?

+1

http://stackoverflow.com/questions/9215036/backbone-js-is-there-a-change-since-last-server-save nedir? – nikoshr

+0

Bunu işaretlediğiniz için teşekkür ederiz. Şimdi anladığım kadarıyla sorumu yeterince yazmamıştım. Sanırım belirli bir koleksiyondaki herhangi bir * modelin değişip değişmediğini bilmek istiyorum. Bu durumda, _.some kullanımım hala gözüküyor, ancak yineleyicinin içinde, _.isEqual() –

+1

yerine 'model.hasChanged()' kullanabilirim. Bunun yerine, 'change' olayları tetiklendiğinde dinleyebilirsiniz. . Koleksiyonunuza bir devlet olarak devam edin. Koleksiyon bir kez sunucuya geri senkronize edildiğinde temizleyin. Sonra sadece o durum özelliğinden kontrol edin. Ben de yeni bir model oluştururken '' '' '' '' '' de '' isNew() 'yi de kontrol etmek isteyebilirsiniz. – j03w

cevap

2

Ben 'düğümler' ek olarak izlemeleri gerekir Başka bir özellik var, bu yüzden changedAttributes() kullanarak geçiş ediyorum: http://backbonejs.org/#Model-changedAttributes:

var anyDirty = _.some(myCollection.models, function(model) { 
    return model.changedAttributes(); 
}); 

yapabilir Ya bu kusurlu bir çözüm görünüyor olmasıdır Bu özellik, özniteliğin orijinal değerine geri dönmesine rağmen değiştirilmiş bir nesne döndürecektir. Öyle görünüyor ki, uzun vadede ihtiyacım olan şey, orijinal verinin anlık görüntüsünü almak ve buna karşı karşılaştırmaktır. Yine de, model.changedAttributes() kullanarak ilk gönderdiğim şeye daha kısa bir alternatif.

+3

Değişim koşullarını içerir. son 'set' den beri olanlar son 'sync' değil –

İlgili konular