Javascript Sencha Touch MVC模型在保存之前

Javascript Sencha Touch MVC模型在保存之前,javascript,sencha-touch,Javascript,Sencha Touch,如何为Sencha Touch MVC模型调用beforeSave方法(即每次添加、更新和/或保存模型记录时触发的方法)?(假设Sencha Touch 1.x) 据我所知,没有任何事件告诉您数据将被更改,但尚未更改。 但是,更改后事件称为“datachanged”。如果您只需要知道您的数据已更改(而不是在更改之前),请为此“datachanged”事件添加一个侦听器,并放弃我编写的其余内容 但是,如果您确实需要“beforedatachanged”事件,请继续阅读: 通过使用Ext.overr

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

(假设Sencha Touch 1.x)

据我所知,没有任何事件告诉您数据将被更改,但尚未更改。 但是,更改后事件称为“datachanged”。如果您只需要知道您的数据已更改(而不是在更改之前),请为此“datachanged”事件添加一个侦听器,并放弃我编写的其余内容

但是,如果您确实需要“beforedatachanged”事件,请继续阅读:

通过使用Ext.override覆盖Sencha行为并在数据实际更改之前触发新事件,您可以实现自己的事件(并将其称为“beforedatachanged”)

这听起来可能很难,但事实并非如此:

首先看看这个: 转到并找到“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);
},
/**
*@私人
*作为“完整”事件侦听器附加到代理的批处理对象。迭代批处理操作
*并更新商店的内部数据混合收集。
*/
onBatchComplete:函数(批处理、操作){
var操作=批处理操作,
长度=操作。长度,
我
这个。吊杆();
对于(i=0;i
在“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);
    },
});
Ext.override(Ext.data.AbstractStore,
{
onBatchComplete:函数(批处理、操作)
{
var操作=批处理操作,
长度=操作。长度,
我
this.firevent('beforedatachanged',this);
这个。吊杆();
对于(i=0;i
然后,您需要在模型代码中侦听beforedatachanged事件,这样您就一切就绪了