Les événements relationnels de l'épine dorsale ne se déclenchent-ils pas?

class TheModel extends Backbone.RelationalModel relations:[ type: Backbone.HasMany key: 'subModels' relatedModel: SubModel collectionType: SubModels reverseRelation: key: 'TheModel' ] themodel = new the TheModel({subModels:[{#stuff},{#stuff},{#stuff}]}) 

J'ai créé des modèles sur themodel.get('subModels') renvoie une collection de modèles.


Maintenant, si je passe les données de sous- mymodel dans mymodel

 themodel.set({subModels:[{changedstuff},{stuff},{stuff}]}) 

Ne devrait-il pas themodel un événement de change ? Ce n'est pas pour moi.


Plus encore, si je passe des données identiques dans mymodel

 themodel.set({subModels:[{samestuff},{samestuff},{samestuff}]}) 

themodel.attributes.subModels événements d' add et de update , même si rien n'est nouveau.

Je ne sais pas pourquoi ces problèmes se passent, toute aide serait géniale, merci !!!!

Si vous réinitialisez toute une relation comme celle-ci en définissant une nouvelle collection, Backbone-relationnel (en ce moment) remplacera tout simplement la collection entière, au lieu de vérifier les différences. Ainsi, il va déclencher un événement de remove pour tous les sous- subModels actuels, puis add événements d'incendie pour chaque nouveau.

Je reçois cependant des change , avec le code suivant (cela aiderait si le code affiché contient un exemple complet;)

 var SubModel = Backbone.RelationalModel.extend({}); var TheModel = Backbone.RelationalModel.extend({ relations: [{ type: Backbone.HasMany, key: 'subModels', relatedModel: SubModel, reverseRelation: { key: 'TheModel' } }] }); themodel = new TheModel({subModels: [{ id: 5 },{id: 7},{id: 8}]}) themodel.bind( 'change', function() { console.debug( 'change; args=%o', arguments ); }); themodel.bind( 'change:subModels', function() { console.debug( 'change:subModels; args=%o', arguments ); }); themodel.bind( 'update:subModels', function() { console.debug( 'update:subModels; args=%o', arguments ); }); themodel.bind( 'add:subModels', function() { console.debug( 'add:subModels; args=%o', arguments ); }); themodel.bind( 'remove:subModels', function() { console.debug( 'remove:subModels; args=%o', arguments ); }); console.debug( 'set new subModels' ); themodel.set( {subModels: [{ id: 5 },{id: 7},{id: 9}] } ) 

Ceci produit la sortie suivante:

 set new subModels change:subModels; args=[Object { _queue={...}, attributes={...}, _escapedAttributes={...}, more...}, [Object { id=5}, Object { id=7}, Object { id=9}], Object {}] change; args=[Object { _queue={...}, attributes={...}, _escapedAttributes={...}, more...}, undefined] remove:subModels; args=[Object { _queue={...}, attributes={...}, _escapedAttributes={...}, more...}, Object { length=3, models=[3], _byId={...}, more...}, Object { _related={...}}] remove:subModels; args=[Object { _queue={...}, attributes={...}, _escapedAttributes={...}, more...}, Object { length=3, models=[3], _byId={...}, more...}, Object { _related={...}}] remove:subModels; args=[Object { _queue={...}, attributes={...}, _escapedAttributes={...}, more...}, Object { length=3, models=[3], _byId={...}, more...}, Object { _related={...}}] add:subModels; args=[Object { _queue={...}, attributes={...}, _escapedAttributes={...}, more...}, Object { length=3, models=[3], _byId={...}, more...}, Object {}] add:subModels; args=[Object { _queue={...}, attributes={...}, _escapedAttributes={...}, more...}, Object { length=3, models=[3], _byId={...}, more...}, Object {}] add:subModels; args=[Object { _queue={...}, attributes={...}, _escapedAttributes={...}, more...}, Object { length=3, models=[3], _byId={...}, more...}, Object {}] update:subModels; args=[Object { _queue={...}, attributes={...}, _escapedAttributes={...}, more...}, Object { length=3, models=[3], _byId={...}, more...}, Object {}] 

Si vous ne voyez pas ces changements d'événements, pouvez-vous vérifier les versions de backbone et backbone-relationnelles que vous utilisez?