2012-11-26 13 views
5

Omurga belgelerine diyor ki:anlama Omurga Modeli seti, doğrulamak ve değiştirmek geri aramalar

doğrulama başarısız olursa Model.set başarısız olur - bu nedenle herhangi bir geri arama tetiklemez değeri olmayacaktır. {Silent: true} 'u Model.set'e geçirebiliriz - o zaman değeri ayarlayacak, ancak hiçbir geri çağrıyı tetiklemeyecektir.

Yani,

Neden Backbone Modeli basitçe bir özellik değeri ayarlamak için geçerli bir durum gerektirir? Kullanıcı UI ile etkileşime girdikçe nitelikler ayarlamak istiyorsak, ancak model henüz geçerli değil mi? Bu, {silent: true} ifadesini geçmedikçe ve ardından değişikliği manuel olarak tetiklemedikçe, geri aramaların kullanılamaması anlamına mı geliyor ?!

bu işleme daha iyi bir yolu ben Neden sorulara cevap emin değilim ama o dizi iyidir neden için argümanlar olduğunu söyleyebiliriz

cevap

3

:) biliyorum söyle doğrulamaları çalıştırır. Örneğin, gerçek zamanlı olarak istemci tarafında doğrulama yapmak için ölü basitleştirir.

senin sorunun yalnızca şu anda kullanıcı tarafından değiştirilebilir ediliyor değeri doğrulayarak çözülebilir ise, hasChanged yöntem ile validate yöntemini birleştirerek yapabilirsiniz. Böyle örnek bir şey için

:

Backbone.Model.extend({ 
    defaults : { name : "" }, 

    validate : function (attrs) { 
    var errors = {}; 
    if(this.hasChanged("name") && attr.name.length == 0) { 
     errors.name = "Need a name yo!"; 
    } 
    //... 

    if(_.keys(errors).length > 0) { 
     return errors; 
    } 
    } 
}) 
+0

Teşekkürler Andrew ama bu bir sorunu çözecek ve başka bir tane oluşturacaktır: değişmemiş değerler için geçerliliği atlamak. – wcamarao

3

Eğer modeline çağrı kurulması her Omurga olarak, bu modelin hangi özellikleri izler değiştirildi ve hangi yeni added.Calling olan niteliklerini validate daha fazla olması sağlar Bunu yaparken etkilidir. Set işlevindeki seçenekler olarak {silent: true} seçeneği, herhangi bir değişiklik olayını tetiklemeyecek şekilde doğrulanmamasına ve değiştirilmemesine neden olur. Eğer düz nesnede değişiklik emin nesne anahtarları yapmak ayarlayabilirsiniz Bu durumda

If you want to set attributes as the user interacts with the UI, but the model is not valid yet

modelin özelliği olarak ve daha sonra sadece modelinde belirlenen bir noktada Şemeş vardır. Dönüş hiçbir değiştirilen özellikler varsa değiştirilmiş veya yanlış olan tüm özelliklerini içeren bir nesne -
var uiChanges = {name:'x'}; //just fill it with your changes 
ur_model.set(uiModel); //then set it ,this way it fires change events only once 

Eğer ur_model.changedAttributes(uiChanges);

changedAttributes kullanabileceğiniz düz nesne ve model arasındaki diff kontrol etmek.

Ayrıca, yalnızca tüm modeli tekrar kaydetmek yerine, değiştirilen öznitelikleri de kullanabilirsiniz.

İlgili konular