2013-05-24 34 views
7

Bu genel değişiklik olayında, hangi özelliğin değiştirildiğini algılayabileceğim bir yol var mı? Ben sadece güncellemeleri bir sunucu etkileşimi sonra sanırım ... myModel.previousAttributes() kullanmaDeğişiklik etkinliğindeki değişiklik etkinliğini alma

  • ama her zaman en son değerleri döndürdü:
    myModel.on('change', function(model) { 
        // Which attribute changed? 
    }); 
    

    Aşağıdaki çalıştı.
  • Yalak nitelikleri yinelemek ve myModel.hasChanged(attr) kullanarak ancak her zaman yanlış döndü.

Bunu başarmanın bir yolu var mı?

cevap

12

Sen hiçbiri yoksa
bir değişmiş sadece modelin niteliklerin karma veya yanlış Al model.changedAttributes

changedAttributes model.changedAttributes ([nitelikler]) kullanabilir.
İsteğe bağlı olarak, bir dış öznitelik karması içinden geçirilerek, bu karmadaki öznitelikler modelden farklı olarak döndürülür. , Bu bakış kısımları güncellenmelidir hangi anlamaya kullanılabilir, ya da ne sunucuya Örneğin

değişiklik senkronize yapılacak ihtiyacını çağırır

var m = new Backbone.Model({ 
    att1: 'a', 
    att2: 'b', 
    att3: 'c' 
}); 

m.on('change', function() { 
    console.log(m.changedAttributes()); 
    console.log(_.keys(m.changedAttributes())); 
}); 

m.set({ 
    att1: 'd', 
    att3: 'e' 
}); 

Ve Bir demo http://jsfiddle.net/nikoshr/NYnqM/

+0

Harika, sadece neye ihtiyacım olduğu için teşekkürler – jviotti

+1

Partiye geç kalabilirim. Eğer Backbone 0.9.9 ve üzerindeyseniz, .listenTo yerine .on yerine, çöp toplama için bağışıklık olan nesnelerle sonuçlanmayacaksınız. – Ananda

+0

Yo ... havalı ... teşekkürler! –