私はそれがドキュメントのわずかなエラーのいずれかだと思います。私は彼らが、例えば、モデルに検証を追加「カスタム」に設定するタイプとモデルの検証配列にオブジェクトを追加する次に、いくつかのコードを追加して
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";
}
を動作するようになりました
{
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;
}
}
更新: @salgizaは正しかった、私は正しく「この」ポインタを設定するために言及するのを忘れてしまったいくつかのステップがあります。あなたは煎茶タッチコードを見ると、あなたはExt.data.Modelのコンストラクタの最後には、オブジェクトに対して定義されたinit関数がありますかどうかをチェックしていることがわかりますし、もしそうなら、
if (typeof this.init == 'function') {
this.init();
それを呼び出しますモデルを定義したら、プロトタイプにinit関数を追加できます。この関数では、オブジェクトの検証を繰り返し、この参照を追加します。このステップは、いずれかのモデルを作成する前に実行する必要があります。
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;
}
}
};
次に設定が自己のポインタを持っている場合は、上記のカスタム検証機能では、ちょうどチェックし、それがない場合は、自己とそれを呼び出します。上記のコードを編集して自己を使用しています。
注:モデルのinit関数が文書化されていないので、senchaがそれを取り除く場合は、このポインタをモデルの検証に追加する必要があります。
ご迷惑をおかけして申し訳ありません。
だけでなくカスタム検証を実装するために必要な
回答が投稿されてから変更されているかどうかは分かりませんが、Sencha 1.1.1では検証範囲が検証対象なので、他の値を取得する方法はないようです(this.getは何もしません。 "this"はモデルではありません)。 – salgiza
1) 'else'ブランチが多すぎます。 2)YourModel.prototype.initはどこに行きますか?これは意味がありません。 –
@SarahVessels 1.そうです。私は2番目のelseブロックのためにaを欠いていました。申し訳ありません。 2. YourModel.prototype.initは、モデルを宣言した後で実行する限り、どこにでも置くことができます。依存関係を管理するためにRequireJSを使用していますので、モデルを組み込んだ後にプロトタイプに追加するモジュールを追加します。 –