Sencha Touch MVC Model beforeSave
问题描述:
如何为Sencha Touch MVC模型调用beforeSave方法(即每次添加,更新和/或保存模型记录时触发的方法)?Sencha Touch MVC Model beforeSave
答
(假设煎茶触摸的1.x)
据我所知是没有的事件,告诉您的数据将被改变,但还没有发生变化。 但是,变更后事件被称为“datachanged”。如果您只需要知道您的数据已更改(而不是在更改之前),请为此“datachanged”事件添加一个侦听器,并丢弃我已写入的其他数据。
但是,如果你真的需要一个“beforedatachanged”事件,请继续阅读:
您可以实现自己的事件(并将其命名为“beforedatachanged”)通过使用Ext.override覆盖煎茶行为,并触发数据实际更改前的新事件。
这听起来很难,但它确实不是:
首先检查了这一点: 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事件和你所有的设置。