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" } } ] } ] } ] }