2013-05-24 15 views
7

Czy w tym globalnym zdarzeniu zmiany można wykryć, który atrybut został zmieniony?Uzyskiwanie zmienionego atrybutu w przypadku zmiany

myModel.on('change', function(model) { 
    // Which attribute changed? 
}); 

Próbowałem następujące:

  • Korzystanie myModel.previousAttributes() ale zawsze wracał najnowsze wartości ... Chyba tylko aktualizacje po interakcji serwera.
  • Atrybuty koryta Iterowanie i używanie myModel.hasChanged(attr), ale zawsze zwracano wartość false.

Jest tam sposób, aby to osiągnąć?

Odpowiedz

12

Można użyć model.changedAttributes

changedAttributes model.changedAttributes atrybutów ([])
Odzyskaj hash atrybutów tylko przy użyciu modelu, że uległy zmianie, lub false jeśli nie ma.
Opcjonalnie można przekazać wartość atrybutu zewnętrznego atrybutu , zwracając atrybuty w haszowaniu, które różnią się od modelu. ten może być używany, aby dowiedzieć się, które części widoku należy aktualizowane, lub co wywołuje potrzebę być wykonane, aby zsynchronizować zmiany do serwera

Na przykład ,

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' 
}); 

I demo http://jsfiddle.net/nikoshr/NYnqM/

+0

Świetnie, właśnie to, czego potrzebowałem dzięki – jviotti

+1

Mogę się spóźnić na imprezę. Jeśli używasz Backbone 0.9.9 i wyższych, zacznij używać .listenTo zamiast .on, aby nie kończyły się na obiektach odpornych na garbage collection. – Ananda

+0

Yo ... cool ... thanks !!! –

Powiązane problemy