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?