ExtJS笔记 Ext.data.Model
A Model represents some object that your application manages. For example, one might define a Model for Users, Products, Cars, or any other real-world object that we want to model in the system. Models are registered via the model manager, and are used by stores, which are in turn used by many of the data-bound components in Ext.
模型表示你的app管理的对象。例如Users, Products, Cars等模型类,或其它你想在app中模型化的真实世界的对象。模型通过model manager注册,被stores使用,stores被Ext中大量数据绑定组件使用。
Models are defined as a set of fields and any arbitrary methods and properties relevant to the model. For example:
模型被定义为一些字段的集合,并可能包含一些模型相关的任意方法、属性。例如:
Ext.define('User', {
extend: 'Ext.data.Model',
fields: [
{name: 'name', type: 'string'},
{name: 'age', type: 'int', convert: null},
{name: 'phone', type: 'string'},
{name: 'alive', type: 'boolean', defaultValue: true, convert: null}
],
changeName: function() {
var oldName = this.get('name'),
newName = oldName + " The Barbarian";
this.set('name', newName);
}
});
The fields array is turned into a MixedCollection automatically by the ModelManager, and all other functions and properties are copied to the new Model's prototype.
字段数组会被 ModelManager自动转变为MixedCollection,其它的函数和属性会被复制到新模型的prototype。
A Model definition always has an identifying field which should yield a unique key for each instance. By default, a field named "id" will be created with a mapping of "id". This happens because of the default idProperty provided in Model definitions.
模型定义总是具有一个标识字段--做为每个实例的唯一键。缺省的,一个命名为”id“的字段会自动映射到”id“属性,这功能是由模型缺省的idProperty提供的。
To alter which field is the identifying field, use the idProperty config.
要改变做为标识列的字段,使用 idProperty 配置。
If the Model should not have any identifying field (for example if you are defining ab abstract base class for your application models), configure the {@liknkidProperty} as null.
如果模型不应该包含任何标识字段(例如你正在定义一个app中使用的抽象基类),则将{@liknkidProperty} 配置为 null。
By default, the built in numeric and boolean field types have a Ext.data.Field.convert function which coerces string values in raw data into the field's type. For better performance with Json or Array readers if you are in control of the data fed into this Model, you can null out the default convert function which will cause the raw property to be copied directly into the Field's value.
缺省的,数值和布尔属性类型有一个内置的函数,它会强迫字符串数值转换为属性的类型。把数据填充到模型中,为了让Json或者是Array读取器有更好的表现,可以把默认的转换方法置空,这些转换方法会把原生属性直接复制到属性的值中。(注:这样做的前提是要保证reander读到的数据值都是正确的,不需要转换)
Now we can create instances of our User model and call any model logic we defined:
现在我们可以创建User模型的实例,并且调用我们定义的任何模型逻辑:
var user = Ext.create('User', {
id : 'ABCD12345',
name : 'Conan',
age : 24,
phone: '555-555-5555'
});
user.changeName();
user.get('name'); //returns "Conan The Barbarian"
Validations 验证
Models have built-in support for validations, which are executed against the validator functions in Ext.data.validations (see all validation functions). Validations are easy to add to models:
模型是内置支持校验器的,它会执行Ext.data.validations中的校验器方法,校验器是很容易添加到模型中的。
Ext.define('User', {
extend: 'Ext.data.Model',
fields: [
{name: 'name', type: 'string'},
{name: 'age', type: 'int'},
{name: 'phone', type: 'string'},
{name: 'gender', type: 'string'},
{name: 'username', type: 'string'},
{name: 'alive', type: 'boolean', defaultValue: true}
],
validations: [
{type: 'presence', field: 'age'},
{type: 'length', field: 'name', min: 2},
{type: 'inclusion', field: 'gender', list: ['Male', 'Female']},
{type: 'exclusion', field: 'username', list: ['Admin', 'Operator']},
{type: 'format', field: 'username', matcher: /([a-z]+)[0-9]{2,3}/}
]
});
The validations can be run by simply calling the validate function, which returns a Ext.data.Errors object:
简单地调用validate方法就会进行校验,它返回Ext.data.Errors对象
var instance = Ext.create('User', {
name: 'Ed',
gender: 'Male',
username: 'edspencer'
});
var errors = instance.validate();
Associations
Models can have associations with other Models via Ext.data.association.HasOne, belongsTo and hasMany associations. For example, let's say we're writing a blog administration application which deals with Users, Posts and Comments. We can express the relationships between these models like this:
模型通过Ext.data.association.HasOne、blongsTo、hasMany建立起和其他模型的关系。例如,写一个博客管理系统,这个系统要处理用户、帖子和内容,这些模型有下面这些关系:
Ext.define('Post', {
extend: 'Ext.data.Model',
fields: ['id', 'user_id'],
belongsTo: 'User',
hasMany : {model: 'Comment', name: 'comments'}
});
Ext.define('Comment', {
extend: 'Ext.data.Model',
fields: ['id', 'user_id', 'post_id'],
belongsTo: 'Post'
});
Ext.define('User', {
extend: 'Ext.data.Model',
fields: ['id'],
hasMany: [
'Post',
{model: 'Comment', name: 'comments'}
]
});
See the docs for Ext.data.association.HasOne, Ext.data.association.BelongsTo and Ext.data.association.HasMany for details on the usage and configuration of associations. Note that associations can also be specified like this:
请查阅文档查看这些关系的用法和配置详细内容,这些关系也可以像下面这样指定:
Ext.define('User', {
extend: 'Ext.data.Model',
fields: ['id'],
associations: [
{type: 'hasMany', model: 'Post', name: 'posts'},
{type: 'hasMany', model: 'Comment', name: 'comments'}
]
});
Using a Proxy
Models are great for representing types of data and relationships, but sooner or later we're going to want to load or save that data somewhere. All loading and saving of data is handled via a Proxy, which can be set directly on the Model:
模型可以很清楚表示出数据和关系的类型,但是使用模型的目的是用来加载和保存数据。所有数据的加载和保存都是使用Proxy来处理,Proxy可以在模型中直接设置。
Ext.define('User', {
extend: 'Ext.data.Model',
fields: ['id', 'name', 'email'],
proxy: {
type: 'rest',
url : '/users'
}
});
Here we've set up a Rest Proxy, which knows how to load and save data to and from a RESTful backend. Let's see how this works:
建立Rest Proxy,Rest Proxy会从RESTful后端加载和保存数据。请看看是它如何工作的:
var user = Ext.create('User', {name: 'Ed Spencer', email: 'ed@sencha.com'});
user.save(); //POST /users
Calling save on the new Model instance tells the configured RestProxy that we wish to persist this Model's data onto our server. RestProxy figures out that this Model hasn't been saved before because it doesn't have an id, and performs the appropriate action - in this case issuing a POST request to the url we configured (/users). We configure any Proxy on any Model and always follow this API - see Ext.data.proxy.Proxy for a full list.
新的模型对象调用save方法会使RestProxy把模型数据保存到服务器上。 RestProxy根据模型是否有id来判断模型是否已经保存,据此采取合适的操作,如果要保存数据,RestProxy会发送post请求到配置的url。请根据API在模型上配置Proxy-请看Ext.data.proxy.Proxy中关于Proxy的完整列表。
Loading data via the Proxy is equally easy:
通过Proxy加载数据是很容易的
//get a reference to the User model class
var User = Ext.ModelManager.getModel('User'); //Uses the configured RestProxy to make a GET request to /users/123
User.load(123, {
success: function(user) {
console.log(user.getId()); //logs 123
}
});
Models can also be updated and destroyed easily:
模型也是很容易更新和销毁的:
//the user Model we loaded in the last snippet:
user.set('name', 'Edward Spencer'); //tells the Proxy to save the Model. In this case it will perform a PUT request to /users/123 as this Model already has an id
user.save({
success: function() {
console.log('The User was updated');
}
}); //tells the Proxy to destroy the Model. Performs a DELETE request to /users/123
user.destroy({
success: function() {
console.log('The User was destroyed!');
}
});
Usage in Stores 在Store中使用
It is very common to want to load a set of Model instances to be displayed and manipulated in the UI. We do this by creating a Store:
在UI中显示和控制一组模型对象是经常需要的,
var store = Ext.create('Ext.data.Store', {
model: 'User'
});
//uses the Proxy we set up on Model to load the Store data
store.load();
A Store is just a collection of Model instances - usually loaded from a server somewhere. Store can also maintain a set of added, updated and removed Model instances to be synchronized with the server via the Proxy. See the Store docs for more information on Stores.
store是模型对象的集合,通常这些模型对象是从服务器某个地方加载的。Store通过Proxy和服务进行通过操作,比如添加,比如更新,比如删除。请查阅Store了解更多关于Store的信息。
ExtJS笔记 Ext.data.Model的更多相关文章
- ExtJS笔记 Ext.data.Types
This is a static class containing the system-supplied data types which may be given to a Field. Type ...
- ExtJs Ext.data.Model 学习笔记
Using a Proxy Ext.define('User', { extend: 'Ext.data.Model', fields: ['id', 'name', 'email'], proxy: ...
- [ExtJs] ExtJs4.2 数据模型Ext.data.Model学习
Model代表应用程序管理的一些对象.例如,我们可能会为 我们想在系统中建模的现实世界中的一些物体像使用者.产品和汽车等定义一个Model.这些Model在 Ext.ModelManager中注册,被 ...
- ExtJS教程(5)---Ext.data.Model之高级应用
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/jaune161/article/details/37391399 1.Model的数据验证 这里借助 ...
- 20. Extjs学习笔记——Ext.data.JsonStore使用说明
Ext.data.JsonStore继承于Ext.data.Store,使得从远程JSON数据创建stores更为方便的简单辅助类.JsonStore合成了Ext.data.HttpProxy与Ext ...
- Extjs学习笔记——Ext.data.JsonStore使用说明
Ext.data.JsonStore继承于Ext.data.Store.使得从远程JSON数据创建stores更为方便的简单辅助类. JsonStore合成了Ext.data.HttpProxy与Ex ...
- extJS 中 ext.data 介绍
ext.data 最主要的功能是获取和组织数据结构,并和特定控件联系起来,于是,Ext.data成了数据的来源,负责显示数据. Ext.data在命名空间中定义了一系列store.reader和pro ...
- ExtJS笔记 Ext.Loader
Ext.Loader is the heart of the new dynamic dependency loading capability in Ext JS 4+. It is most co ...
- EXtJS Ext.data.Model
(一).首先我们介绍一下Model类中比较常用的几个属性,如果我们想构建一个Model类,最主要的属性就是(Fields)属性,这个属性接受一个数组.用来设置Model中所包含的字段.定义的格式如下: ...
随机推荐
- Oracle PL/SQL设置快捷键的方法
pl sql默认设置不是很方便,最近搜罗了一下网上关于PLSQL的一些常用快捷键配置,主要是方便以后自个使用 1.登录后默认自动选中My Objects 默认情况下,PLSQL Developer ...
- iOS学习26之UINavigationController
1. UINavigationController 1> 概述 UINavigationController : 导航控制器, 是 iOS 中最常用的多视图控制器之一, 用它来管理多个视图控制器 ...
- BZOJ1894 : Srm444 avoidfour
首先只有质数个$4$且个数不超过$10$的限制条件才有用, 也就是长度不能为$44,444,44444,4444444$的倍数. 考虑容斥,计算长度必须是它们$lcm$的倍数,且没有连续$4$个$4$ ...
- 多表头固定demo--html Table
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Android AsyncTask
AsyncTask类任务管理: 内部会创建一个进程作用域的线程池来管理要运行的任务,也就就是说当你调用了AsyncTask#execute()后,AsyncTask会把任务交给线程池,由线程池来管理创 ...
- [总结]HNOI2015省队选拔
// 此博文为迁移而来,写于2015年4月21日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102vy9t.html 这次省 ...
- spring源码学习之路---IOC初探(二)
作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 上一章当中我没有提及具体的搭 ...
- 初识WebSocket
众所周知,Http协议是无状态的,并且是基于Request/Response的方式与服务器进行交互,也就是我们常说的单工模式.但是随着互联 网的发展,浏览器与服务端进行双向通信需求的增加,长轮询向服务 ...
- Java生成CSV文件实例详解
本文实例主要讲述了Java生成CSV文件的方法,具体实现步骤如下: 1.新建CSVUtils.java文件: package com.saicfc.pmpf.internal.manage.utils ...
- DataContractJsonSerializer deserialize stream
var response = await httpClient.PostAsync(endpoint, new FormUrlEncodedContent(parameters)); var resu ...