ExtJs6理解 -- Ext.data.Model

1、Ext.data.Model

    Ext.data.Model 相当于java中的 pojo类 ,定义一个对象的相关属性 。

例如:

Ext.onReady(function(){
    var user = Ext.create('User',{
        id   : 'ABCD12345',
            name : 'Conan',
            age  : 24,
            phone: '555-555-5555'
        
    })
    user.changeName();
    alert(user.get('age'));    
    Ext.Msg.alert(user.get('name'));
    
});
Ext.define('User',{
    extend: 'Ext.data.Model',
    fields:[{name:'name',type:'string'},
        {name:'age',type:'int',convert:function(value,record){
                        return value-2;
}},
        {name:'phone',type:'string'},
        {name:'alive',type:'boolean',defaultValue:true,convert:null}
        
        ],
    changeName: function(){
        var oldName = this.get('name'),
        newName = oldName+" The Mercy";
        this.set('name',newName);
}
})
  • id: 表示每一个Model的唯一标识 ,可选。create时赋值。

  • name:表示属性名

  • type:表示属性类型

  • convert:表示转变或代替,如 在我的User 里我将age属性 变成了它的原本指减2.

可以在自己的Model的里定义自己的方法,如‘User’里的 'changName()' 方法。

每个Model可以同 Ext.create() 来创建,并且可以调用Model本身自带的方法和属性。如:get(),set()等 方法(可自行看API)

2、Model之间的对应关系

    ①、one-to-one  之 reference

Ext.onReady(function(){
    var addr= Ext.create('Address',{
            id:'2'    ,    
            address: '123',
            city:'Shenzhen',
            state:true
    });
    var user = Ext.create('User',{
            addressId: addr
    });    
    var addr1 = user.get('addressId').get('city');
    alert(addr1)
});

 Ext.define('Address', {
     extend: 'Ext.data.Model',

     fields: [
         'address',
         'city',
         'state'
     ]
 });

 Ext.define('User', {
     extend: 'Ext.data.Model',

     fields: [{
         name: 'addressId',
         reference: 'Address',
         unique: true
     }]
 });

User类和Adress类的一一对应的关系。

     ②: one-to-many -- belongsTo and hasMany

官方的一个例子

Ext.onReady(function(){
	Ext.define("User", {
    extend: 'Ext.data.Model',
    fields: [
        'id', 'name'
    ],

    hasMany: {model: 'Order', name: 'orders'},

    proxy: {
        type: 'rest',
        url : 'user_1.json',
        reader: {
            type: 'json',
            rootProperty: 'users'
        }
    }
});

Ext.define("Order", {
    extend: 'Ext.data.Model',
    fields: [
        'id', 'total'
    ],

    hasMany  : {model: 'OrderItem', name: 'orderItems', associationKey: 'order_items'},
    belongsTo: 'User'
});

Ext.define("OrderItem", {
    extend: 'Ext.data.Model',
    fields: [
        'id', 'price', 'quantity', 'order_id', 'product_id'
    ],

    belongsTo: ['Order', {model: 'Product', associationKey: 'product'}]
});

Ext.define("Product", {
    extend: 'Ext.data.Model',
    fields: [
        'id', 'name'
    ],

    hasMany: 'OrderItem'
});
	var store= Ext.create('Ext.data.Store',{
			model:'User'
			
		})
	var msg = [];
	store.load({
    callback: function() {
        //the user that was loaded
        var user = store.first();

        console.log("Orders for " + user.get('name') + ":")

        //iterate over the Orders for each User
        user.orders().each(function(order) {
            console.log("Order ID: " + order.getId() + ", which contains items:");

            //iterate over the OrderItems for each Order
            order.orderItems().each(function(orderItem) {
                //we know that the Product data is already loaded, so we can use the synchronous getProduct
                //usually, we would use the asynchronous version (see Ext.data.Model.belongsTo)
                var product = orderItem.getProduct();

                alert(orderItem.get('quantity') + ' orders of ' + product.get('name'));
            });
        });
    }
});
	
});

belongsTo: 指 ‘多’ 的一方

hasMany: 指 “一” 的一方。

  hasMany  : {model: 'OrderItem', name: 'orderItems', associationKey: 'order_items'}
   belongsTo: ['Order', {model: 'Product', associationKey: 'product'}]

其中 model:是指对应的Model,  

name:可通过这个值过去他的Model对象 ,如 :

user.orders().each(function(order)...

associationKey: 指你在定义 user_1.json 文件是需要用的名字,如我的user_1.json的文件如下

{
    "users": [
        {
            "id": 1,
            "name": "Ed",
            "orders": [
                {
                    "id": 1,
                    "total": 100,
                    "order_items": [
                        {
                            "id": 1,
                            "price": "100",
                            "quantity": 2,
                            "product": {
                                "id": 1,
                                "name": "MacBook"
                            }
                        },
                        {
                            "id": 2,
                            "price": "50",
                            "quantity": 3,
                            "product": {
                                "id": 1,
                                "name": "iphone"
                            }
                        }
                    ]
                }
            ]
        }
    ]
}


你可能感兴趣的:(Model,Model,ExtJs)