Sencha Touch MVC Model beforeSave



我如何调用beforeSave方法(即每次添加,更新和/或保存模型记录时触发的方法)为Sencha Touch MVC模型?

(假设Sencha Touch 1.x)

据我所知,没有事件告诉你数据将被更改,但还没有更改。然而,更改后的事件被称为"数据更改"。如果你只需要知道你的数据被改变了(而不是在它被改变之前),为这个' datachchanged '事件添加一个监听器,并放弃我写的其余内容。

然而,如果你真的需要一个' beforedatchanged '事件,请继续阅读:

你可以实现你自己的事件(并称之为' beforedatachchanged '),通过使用Ext.override来覆盖Sencha行为,并在数据实际改变之前触发你的新事件

这可能听起来很难,但它真的不是:

先看看这个:http://docs.sencha.com/touch/1-1/source/AbstractStore.html找到"onBatchComplete",你会看到它触发了' datachchanged '事件:

/**
 * @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);
    },
});

然后你需要在你的模型代码中监听beforedatachchanged事件,你就都设置好了。

最新更新