Myślę, że to jeden z drobnych błędów w dokumentacji. Mam ich do pracy poprzez dodanie kodu
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";
}
Następnie dodać do modelu walidacji, dodać obiekt do walidacji tablicy modela z typem ustawionym na „zwyczaj”, na przykład
{
type: 'custom', field: 'SomeField', message: "Your field is bad",
fn: function (SomeFieldValueForThisInstance) {
//Add some validation code. The this pointer is set to the model object
//so you can call this.get("SomeOtherFieldToCheck")
//or any other instance method
//if the field is good
return true;
//else
return false;
}
}
Aktualizacja: @salgiza rację, istnieje kilka kroków zapomniałem wspomnieć, aby ustawić „to” wyżeł poprawnie. Jeśli spojrzeć w Sencha kodu dotykowym zobaczysz, że na końcu konstruktora Ext.data.Model za to sprawdza czy istnieje funkcja zdefiniowana startowych na obiekcie, a jeśli tak, to nazywa
if (typeof this.init == 'function') {
this.init();
Po zdefiniowaniu modelu możesz dodać funkcję init do prototypu. W tej funkcji należy powtórzyć sprawdzanie poprawności obiektu i dodać do niego odwołanie. Ten krok należy wykonać przed utworzeniem któregokolwiek z modeli.
YourModel.prototype.init = function() {
var i, len;
if (this.validations) {
for (i = 0, len = this.validations.length; i < len; i++) {
this.validations[i].self = this;
}
}
};
Następnie w funkcji niestandardowych walidacji powyżej, po prostu sprawdzić, czy konfiguracja ma wskaźnik siebie, a jeśli tak, to nazywamy go z siebie. Zmieniłem powyższy kod, aby użyć siebie.
Uwaga: nie widzę funkcji init modelu jest udokumentowane, więc jeśli Sencha pozbywa się go, trzeba dodać ten wskaźnik do walidacji tego modelu w jakiś inny sposób.
Przepraszam, jeśli spowodowało to zamieszanie dla kogokolwiek.
ja nie wiem, czy to się zmieniło od kiedy pisał swoją odpowiedź, ale w Sencha 1.1.1 Zakres walidacji jest przedmiotem walidacji, więc nie wydaje się być jakiś sposób, aby uzyskać inne wartości w model, z wyjątkiem sprawdzanego (this.get nie robi nic, ponieważ "to" nie jest modelem). – salgiza
1) Masz za dużo oddziałów "innego". 2) Gdzie jest 'YourModel.prototype.init'? To nie ma sensu. –
@SarahVessels 1. Masz rację. Brakowało mi} dla drugiego bloku. Przepraszam za to. 2. YourModel.prototype.init może przejść w dowolnym miejscu tak długo, jak wykonasz go po ogłoszeniu swojego modelu.Używam RequireJS do zarządzania zależnościami, więc dołączam moduł, który dodaje do prototypu po uwzględnieniu moich modeli. –