6
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}]}) 

que tienen createModels en por lo themodel.get('subModels') devuelve una colección de modelos.¿Los eventos relacionales de red troncal no se activan?


datos submodelo Ahora si paso transformó en mymodel

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

No deberían themodel lanzar un evento change? No es para mi


Más aún si paso datos idénticos en mymodel

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

themodel.attributes.subModels lanza add y update eventos, a pesar de que no hay nada nuevo.

No estoy seguro de por qué están pasando estos problemas, cualquier ayuda sería genial, gracias !!!!

+0

Así que creo que descubrí que la funcionalidad createModels de backbone-relational no actualizará los modelos anidados en otros conjuntos de atributos para el módulo principal. Simplemente los cierra y agrega otros nuevos. Entonces, la razón por la que esto sucedía era porque solo los eventos de adición/eliminación se activaban y no cambiaban los eventos. También es la razón por la cual todos esos eventos se activan cuando los datos son los mismos. Al menos esto es lo que pienso ahora mismo, avíseme si esto es correcto o incorrecto. ¡Gracias! – fancy

Respuesta

0

Si restablece toda una relación de ese tipo configurando una nueva colección, Backbone-relational reemplazará (en este momento) toda la colección, en lugar de buscar diferencias. Por lo tanto, lanzará un evento remove para todos los eventos actuales subModels, luego disparará add para cada uno nuevo.

me pongo change eventos, sin embargo, con el siguiente código (que sería útil que el código publicado contiene un ejemplo completo aunque;)

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}] }) 

Esto produce el siguiente resultado:

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 usted no ve estos eventos de cambio, ¿podría verificar qué versiones de backbone-backbone-relational está usando?

+0

Tengo el mismo problema en Backbone 0.5.3 y Backbone-Relational 0.4.0 - Agregar y quitar eventos de fuego en las relaciones de los padres. Los cambios no hacen nada. –

Cuestiones relacionadas