Sencha Touch модель MVC перед сохранением - PullRequest
0 голосов
/ 28 ноября 2011

Как вызвать метод beforeSave (т. Е. Метод, который запускается при каждом добавлении, обновлении и / или сохранении записи модели) для модели Sencha Touch MVC?

1 Ответ

1 голос
/ 07 декабря 2011

(при условии, что Sencha Touch 1.x)

Насколько я знаю, нет события, которое сообщит вам, что данные будут изменены, но еще не изменились.Тем не менее, событие после изменения называется «datachanged».Если вам просто нужно знать, что ваши данные изменены (а не ДО того, как они будут изменены), добавьте прослушиватель для этого события 'datachanged' и откажитесь от написанного мной остального.

Однако, если вам действительно нужнособытие beforedatachanged, читайте дальше:

Вы можете реализовать свое собственное событие (и назвать его beforedatachanged), используя Ext.override, чтобы переопределить поведение Sencha и вызвать новое событие, прежде чем данные будут фактически изменены..

Это может звучать сложно, но на самом деле это не так:

Сначала проверьте это: http://docs.sencha.com/touch/1-1/source/AbstractStore.html Идите и найдите «onBatchComplete», вы увидите, что он запускаетСобытие 'datachanged':

/**
 * @private
 * Attached as the 'complete' event listener to a proxy's Batch object. Iterates over the batch operations
 * and updates the Store's internal data MixedCollection.
 */
onBatchComplete: function(batch, operation) {
    var operations = batch.operations,
        length = operations.length,
        i;

    this.suspendEvents();

    for (i = 0; i < length; i++) {
        this.onProxyWrite(operations[i]);
    }

    this.resumeEvents();

    this.fireEvent('datachanged', this);
},

До "this.suspendEvents ();"Вы должны запустить свое собственное пользовательское событие, потому что после этого выполняются операции.

Чтобы переопределить это, напишите в своем приложении что-то вроде этого:

Ext.override(Ext.data.AbstractStore,
{
    onBatchComplete: function(batch, operation)
    {
        var operations = batch.operations,
            length = operations.length,
            i;

        this.fireEvent('beforedatachanged', this);

        this.suspendEvents();

        for (i = 0; i < length; i++) {
            this.onProxyWrite(operations[i]);
        }

        this.resumeEvents();

        this.fireEvent('datachanged', this);
    },
});

Затем вам нужно прослушатьк событию beforedatachanged в коде вашей модели, и все готово.

...