ExtJSノートField

7348 ワード

Fields are used to define what a Model is. They aren't instantiated directly - instead, when we create a class that extends Ext.data.Model , it will automatically create a Field instance for each field configured in a  Model . For example, we might set up a model like this:
フィールドはmodelが何であるかを定義するために使用されます.直接インスタンス化されません--代わりに、field構成項目に基づいて各フィールドのインスタンスを自動的に作成するmodelクラスを作成します.たとえば、次のモデルを構築します.
Ext.define('User', {
    extend: 'Ext.data.Model',
    fields: [
        'name', 'email',
        {name: 'age', type: 'int'},
        {name: 'gender', type: 'string', defaultValue: 'Unknown'}
    ]
});

 
Four fields will have been created for the User Model - name, email, age and gender. Note that we specified a couple of different formats here; if we only pass in the string name of the field (as with name and email), the field is set up with the 'auto' type. It's as if we'd done this instead:
userモデルの4つのフィールド--name、email、age、genderを作成します.ここでは、異なるフォーマットのペアを指定します.フィールドの名前(nameとemailの場合)だけを入力すると、フィールドはautoタイプとして作成されます.私たちがこのようにします.
Ext.define('User', {
    extend: 'Ext.data.Model',
    fields: [
        {name: 'name', type: 'auto'},
        {name: 'email', type: 'auto'},
        {name: 'age', type: 'int'},
        {name: 'gender', type: 'string', defaultValue: 'Unknown'}
    ]
});

 

Type and conversionタイプと変換


The  type  is important - it's used to automatically convert data passed to the field into the correct format. In our example above, the name and email fields used the 'auto' type and will just accept anything that is passed into them. The 'age' field had an 'int' type however, so if we passed 25.4 this would be rounded to 25.
タイプは重要です.fieldに渡されたデータに対して自動変換を使用し、正しいフォーマットに変換します.上記の例では、nameフィールドとemailフィールドはautoタイプを使用し、それらに渡される値について説明します.しかしながら、ageフィールドはintタイプであるため、25.4を着用すると自動的に25に四捨五入される.
Sometimes a simple type isn't enough, or we want to perform some processing when we load a Field's data. We can do this using a  convert  function. Here, we're going to create a new field based on another:
単純なタイプでは不十分な場合があるか、データをロードするときにいくつかの処理を実行したい場合があります.convert関数を使用してこれを行うことができます.ここでは、他のフィールドに基づいた新しいフィールドを作成します.
Ext.define('User', {
    extend: 'Ext.data.Model',
    fields: [
        {
            name: 'firstName',
            convert: function(value, record) {
                var fullName  = record.get('name'),
                    splits    = fullName.split(" "),
                    firstName = splits[0];

                return firstName;
            }
        },
        'name', 'email',
        {name: 'age', type: 'int'},
        {name: 'gender', type: 'string', defaultValue: 'Unknown'}
    ]
});

 
Now when we create a new User, the firstName is populated automatically based on the name:
新しいuserを作成すると、firstNameはnameに基づいて自動的に生成されます.
var ed = Ext.create('User', {name: 'Ed Spencer'});

console.log(ed.get('firstName')); //logs 'Ed', based on our convert function

 
Fields which are configured with a custom  convert  function are read after all other fields when constructing and reading records, so that if convert functions rely on other, non-converted fields (as in this example), they can be sure of those fields being present.
カスタムconvert関数構成の自動化は、他のフィールドの後に構築および読み込みされます.
In fact, if we log out all of the data inside ed, we'll see this:
実際、すべてのedのデータをlogで出力すると、次のようになります.
console.log(ed.data);

//outputs this:
{
    age: 0,
    email: "",
    firstName: "Ed",
    gender: "Unknown",
    name: "Ed Spencer"
}

 
The age field has been given a default of zero because we made it an int type. As an auto field, email has defaulted to an empty string. When we registered the User model we set gender's  defaultValue  to 'Unknown' so we see that now. Let's correct that and satisfy ourselves that the types work as we expect:
ageはintタイプであるため、0のデフォルト値が自動的に与えられます.autoフィールドとして、emailのデフォルト値は空の文字列です.usermodelを登録すると、genderのデフォルト値は「Unknown」に設定されます.この値を修正して、期待通りに動作させましょう.
ed.set('gender', 'Male');
ed.get('gender'); //returns 'Male'

ed.set('age', 25.4);
ed.get('age'); //returns 25 - we wanted an int, not a float, so no decimal places allowed