注:私はこのコードをテストしていないので、後でその概念とコメントを使用して質問があります。
データエンティティ用にExt.data.Modelクラスを定義する場合(Ext JSの場合はExt.data.Recordを使用)、Ext.data.Fieldプロパティインスタンスの一部としてconvert関数を追加します。これは必要な場合はすべてのフィールドで行うことができますが、おそらく推奨されません。
私はこのフレームワークには新しいので、あなたがModelクラスで別のクラスを拡張している場合には、変換関数で "this.self"表記を使用する方法がわかりません。たとえば、Employeeクラスに定義されているデフォルト値を持たず、別のクラス(Employeeなど)から継承したEmployeeコンストラクタがそのプロパティを設定すると、スーパークラス(baseクラスまたは親クラス)コンストラクタを使用してデータをエンコードします。今すぐ、EmployeeDeveloper.dataValueプロパティを取得します。
Ext.define('EmployeeDeveloper', {
extend: 'Ext.data.Model',
fields: [
{ name: 'name', type: 'string', defaultValue: 'Paul' },
{ name: 'profession', type: 'string', defaultValue: 'Ext JS developer' },
{ name: 'salary', type: 'float', defaultValue: '95000' },
{ name: 'dataValue', type: 'string',
convert: function(value, record) {
// feel free to use value and record parameters in this function
return encodeData(record.get('dataValue')); // you may have to use the "value" parameter instead of record.get('dataValue') if referencing the field in it's own convert function (haven't tested)
}
}
]
});
var empDev = Ext.create(
'EmployeeDeveloper',
{
name: 'MacGyver',
dataValue: 'ABC'
},
'MacGyver',
123
);
var encodedDataValue = empDev.get('dataValue');
変換に関する注意:あなたは変換関数署名の下に定義されたフィールドを参照している場合、コードはそれについて知ることができませんし、値を取得することができません。
ORカスタムクラスを持っていますが、モデルクラスを使用しない場合...私はまた、一種のきちんとしたのExt JSでだ何か他のものについて読ん
今夜。 Ext JS 4でオートゲッターとセッターを追加しました。フレームワークの新しいバージョンは、プロパティに "get"、 "set"、 "reset"、または "apply"という接頭辞を自動的に付加し、あなたの定義されたクラスの "設定"プロパティ
通常のJavaScriptでは、実際のクラスはありませんが、Senchaではクラスを定義することができ、ユーザー定義クラスのオブジェクトインスタンスをインスタンス化することができます。例えば
、あなたが定義された以下のクラスがあるとします。
Ext.define('Paul.MyClass'), {
extend: 'Ext.Window',
config: {
name: 'Paul'
}
});
あなたがそうのようなあなたのオブジェクトのインスタンスを作成する場合は、自動的に4つの機能へのアクセス権を持っています。
var win = Ext.create('Paul.MyClass'); // create instance of MyClass object
var myName = win.getName(); // get name
win.setName('MacGyver'); // set name
win.resetName(); // this resets the value back to the default value ('Paul')
win.applyName(); // this calls custom code
win.show();
私はあなたが示唆されているロジックを適用*メソッドをオーバーライドすることをお勧めしたいです。次に、win.get *();を呼び出します。後で新しい価値を得るために。プロキシやストアでデータにアクセス(取得または設定)するたびにプロパティを操作する必要がないように、エンコードするフィールドごとにエンコードされたフィールドを追加することをお勧めします。
Ext.define('Paul.MyClass'), {
extend: 'Ext.Window',
config: {
name: 'Paul',
dataValue: 'non encoded value of your data'
}
applyName: function(title) {
this.name = this.name + ' ' + title; // custom logic goes here
}
applyDataValue: function(encodeKey) {
// get the encoded data value
this.self.dataValue = 'encoded data value'; // custom logic goes here
}
});
'convert()' _is_双方向メソッドです。私はそれをたとえば10進カラーコードを16進数に前後に変換するために使用します。 – sha
ちょうど私が理解している..(1)データを取得するとき、ajaxが取得してエンドユーザーにデータを表示する前にデコードする前に、サーバー上のデータをエンコードしていますか? (2)URLにデータを渡すときに、エンコードしてから、データを使用するときにExt JSでデコードしますか? (3)データを保存するときに、Ext JSでエンコードしてからサーバーに渡し、保存する前にデコードしますか? – MacGyver
双方向関数の変換方法は?何かがレコードから値を読み込んでいるときに呼び出されるように見えます。 myRec.get( 'field1')。つまり、書き込み操作中に呼び出される変換換算が存在します。 myRec.set( 'field1'、 'new value')? – Paul