Реляционные события магистрали не запускаются?

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, хотя ничего нового.

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


person fancy    schedule 07.10.2011    source источник
comment
Итак, я думаю, что понял, что функциональность createModels backbone-relational не будет обновлять вложенные модели при дальнейших наборах атрибутов родительского модуля. Он просто затирает их и добавляет новые. Таким образом, причина, по которой это происходило, заключалась в том, что запускались только события добавления/удаления, а не события изменения. Именно поэтому все эти события срабатывают, когда данные совпадают. По крайней мере, так я думаю прямо сейчас, дайте мне знать, правильно это или нет. Спасибо!   -  person fancy    schedule 08.10.2011


Ответы (1)


Если вы сбрасываете такое отношение целиком, устанавливая новую коллекцию, Backbone-relational (на данный момент) просто заменяет всю коллекцию, вместо проверки различий. Таким образом, он будет запускать событие 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 {}]

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

person Paul    schedule 02.11.2011
comment
У меня такая же проблема в Backbone 0.5.3 и Backbone-Relational 0.4.0 — события Add и Remove запускаются для родительских отношений. Изменения ничего не дают. - person Eric Hu; 05.01.2012