J'ai lu et essayé d'utiliser la méthode proposée dans ce fil: How to add a custom validation rule to a model in Sencha Touch.Sencha touch 2.0: validation de modèle personnalisé avec les magasins
Alors d'abord, j'ajouter un type de validation personnalisé au Ext.data.validations singleton:
if (Ext.data) {
Ext.data.validations.custom = function (config, value) {
if (config && Ext.isFunction(config.fn)) {
//this should be the model
if (config.self) {
return config.fn.call(config.self, value);
} else {
return config.fn(value);
}
}
else
{
return false;
}
};
Ext.data.validations.customMessage = "Error";
}
Ensuite, depuis que je suis en utilisant ST2, je demande ce que Ben G propose. J'étend Ext.data.Model pour inclure une référence à 'self' (this).
Ext.define ('MyApp.model.CustomModelBase', { étendent:. 'Ext.data.Model',
//adding an initializer to let custom validators access "self"
init : function() {
var i, len;
if (this.config.validations) {
for (i = 0, len = this.config.validations.length; i < len; i++) {
this.config.validations[i].self = this;
}
}
}
});
Enfin, je crée un modèle extension du CustomModelBase Appelons ce modèle MyApp .model.MyModel. Je définir une règle de validation personnalisée à l'intérieur.
Ext.define('MyApp.model.MyModel', {
extend: 'MyApp.model.CustomModelBase',
config: {
fields: [ {name:'field1'} ],
validations: [
{
type: 'custom', field: 'field1', message: "Your field is bad",
fn: function (value) {
**console.log(this);**
return (value>0);
}
}
],
proxy: {
type: 'localstorage',
id : 'MyApp-Local-Storage'
}
}
});
maintenant, tout fonctionne bien quand une seule instance de MyModel est créé.
Le problème i s quand j'ai le magasin de MyModel. Lorsque vous faites cela, la référence à 'this' reçue dans la fonction fn semble toujours être le dernier élément dans le magasin. Plus précisément, le console.log (this) sort toujours le dernier objet Record du magasin.
Comment puis-je résoudre ce problème?
mise à jour: Je me demande si ce n'est pas parce que tous les enregistrements du magasin partagent la même instance de modèle? Pouvons-nous faire quelque chose à ce sujet ou est-ce que toute la méthode décrite ci-dessus échoue pour utiliser les magasins?