Nehmen wir an, ich möchte zwei Event-Listener haben, eine für myAttribute
-Eigenschaft und eine weitere für den Rest der Eigenschaften.Bind model change event nur bestimmten Eigenschaften
dieses Problem zu lösen, kam ich mit dieser Lösung:
var Model = Backbone.Model.extend({
defaults:function(){
return {
myAttribute:'',
secondAttribute:'',
thirdAttribute:'',
only:'myAttribute'
};
},
initialize:function(){
this.listenTo(this,'change',this.listenUnlessOnly);
this.listenTo(this,'change:'+this.get('only'),this.listenOnly);
},
listenUnlessOnly:function(){
// make sure that attributeName doesn't belong to the list
// of updated attributes
if(_.keys(this.changedAttributes()).indexOf(this.get('only')) === -1) {
alert('Another attribute changed');
}else{
// the other attribute changed so do nothing
}
},
listenOnly:function(){
alert('Yoli myAttribute changed :) !!!');
}
});
var m = new Model();
m.set('username','hi'); // Another attribute changed
m.set('myAttribute','something'); // 'Yoli myAttribute changed :) !!!'
Wo lese ich zwei Ereignis-Listenern eine für die benutzerdefinierte Eigenschaft (MyAttribute) und eine andere für den Rest der Eigenschaften registriert, und in der zweiten Eventlistener bin Überprüfung i, wenn die aktualisierte Eigenschaft nicht myAttribute
feuert 2 Ereignis zu vermeiden.
Gibt es eine Standardlösung für dieses Szenario? etwas wie folgt aus:
this.listenTo(this,'change!myAttribute',this.listenUnlessOnly);
this.listenTo(this,'change:'+this.get('only'),this.listenOnly);
Jeder Vorschlag würde geschätzt.
Also, was passieren soll, wenn ein Bündel von Attributen zu einer Zeit, einschließlich 'myAttribute' geändert werden? –
@TJ eine gute Frage, gut in diesem Fall werden die anderen Attribute von dem anderen Ereignis-Listener behandelt und '' myAttribute'' wird nur von seinem Event-Listener behandelt. – Ismail