Магистральные реляционные события не запускаются? - PullRequest
6 голосов
/ 07 октября 2011
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}]})

У меня есть createModels на , поэтому themodel.get('subModels') возвращает коллекцию моделей.


Теперь, если я передам измененные данные подмодели в mymodel

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

Разве themodel не должен вызывать событие change?Это не для меня.


Более того, если я передаю идентичные данные в mymodel

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

themodel.attributes.subModels, генерирует события add и update, хотя ничего нового не происходит.

Я не уверен, почему эти проблемы происходят, любая помощь будет отличной, спасибо !!!!

1 Ответ

0 голосов
/ 02 ноября 2011

Если вы сбрасываете целое отношение таким образом, устанавливая новую коллекцию, Backbone-реляционная (на данный момент) просто заменит всю коллекцию вместо проверки на различия.Таким образом, он будет запускать событие remove для всех текущих subModels, а затем запускать события add для каждого нового.

Я получаю change события, хотя, со следующим кодом (это будетпомогите, если опубликованный код содержит полный пример;)

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

Это приводит к следующему выводу:

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

Если вы не видите эти события изменения, вы можете проверить, какие версиииспользуемой магистрали и магистральной сети?

...