(文档翻译)Ext.data.Model
来源:互联网 发布:blink 大数据 编辑:程序博客网 时间:2024/05/14 23:14
原文链接:http://docs.sencha.com/touch/2-0/#!/api/Ext.data.Model
extend: 'Ext.data.Model', config: { fields:[ {name: 'name', type: 'string'}, {name: 'age', type: 'int'}, {name: 'phone', type:'string'}, {name: 'alive', type:'boolean', defaultValue: true} ] },
changeName: function() { varoldName = this.get('name'), newName = oldName + " TheBarbarian";
this.set('name', newName); }
name : 'Conan', age : 24, phone: '555-555-5555'
extend:'Ext.data.Model',
config: { 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}/} ] } name: 'Ed', gender: 'Male', username: 'edspencer'
extend: 'Ext.data.Model',
config: { fields: ['id','user_id'], belongsTo: 'User', hasMany :{model: 'Comment', name: 'comments'} }
extend: 'Ext.data.Model',
config: { fields: ['id', 'user_id','post_id'], belongsTo: 'Post' }
extend: 'Ext.data.Model',
config: { fields: ['id'], hasMany: [ 'Post', {model: 'Comment', name: 'comments'} ] } extend:'Ext.data.Model',
config: { fields: ['id'], associations: [ {type:'hasMany', model: 'Post', name: 'posts'}, {type:'hasMany', model: 'Comment', name: 'comments'} ] } extend:'Ext.data.Model',
config: { fields: ['id', 'name', 'email'], proxy: { type:'rest', url :'/users' } }
success: function(user){ console.log(user.getId()); //logs 123 }
success: function(){ console.log('The User was updated'); }
success: function(){ console.log('The User was destroyed!'); } model: 'User'
一个模型(Model)就代表着你应用中管理的某个对象。比如说,一个人可能定义了一个模型来代表用户(Users),产品(Product),汽车(Cars)或者任意其他现实世界中我们想用模型来表示的对象。模型通过modelmanager注册,并被stores使用。而stores反过来又被Ext中许多绑定数据的组件所使用。
模型被定义为一系列字段(fields)以及任意和模型相关的方法和属性的集合。比如:
Ext.define('User',{
});
这个字段数组自动的被 ModelManager转化为一个MixedCollection,并且所有其他的函数和属性被复制到新模型的原型中。
现在我们可以创建我们的User模型的实例并执行我们定义在其中的任意逻辑:
var user = Ext.create('User',{
});
user.changeName();
user.get('name'); //returns"Conan The Barbarian"
Validations
模型有对验证的内嵌支持, 并且是通过Ext.data.validations ( seeall validation functions)中的验证器函数来执行的。验证可以很容易的加到模型中:
Ext.define('User',{
});
验证可以简单地通过调用 validate函数来执行。该函数返回一个 Ext.data.Errors对象:
var instance =Ext.create('User', {
});
var errors =instance.validate();
Associations
模型可以和其他的模型通过Ext.data.association.HasOne, belongsTo 以及 hasMany的关系建立对应关系。例如,假设我们正在写一个博客的管理应用,要处理的项包括Users,Posts 以及 Comments。这些模型之间的关系我们可以这样来表达:
Ext.define('Post',{
});
Ext.define('Comment', {
});
Ext.define('User', {
});
可以参看Ext.data.association.HasOne, Ext.data.association.BelongsTo and Ext.data.association.HasMany的文档来了解关系的应用以及配置的更多细节。注意,关系也可以像下面这样指定:
Ext.define('User', {
});
应用一个代理(Using a Proxy)
模型可以很好的代表数据和关系的类型,但是我们早晚要在某个地方想要去加载或者保存那些数据。加载和保存数据都是通过一个Proxy,他可以在Model中直接配置:
Ext.define('User', {
});
这里我们已经设置了一个 RestProxy,它知道怎样从后端加载数据以及如何保存数据到后端。让我们看看这是如何做到的:
var user = Ext.create('User', {name: 'Ed Spencer', email:'ed@sencha.com'});
user.save(); //POST /users
通过调用新的模型实例的save方法来告诉配置好了的RestProxy我们希望把我们模型的数据存储在服务器上。 RestProxy指出这个模型之前没有被保存过因为它没有id,并执行适当的操作--在这种情况下发送一个POST请求到我们配置好的url(/users)。我们可以在任意的模型上配置任意的Proxy并总是要遵从这个API--参见Ext.data.proxy.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, {
});
模型也可以很容易的进行更新和销毁:
//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 willperform a PUT request to /users/123 as this Model already has anid
user.save({
});
//tells the Proxy to destroy the Model. Performs a DELETErequest to /users/123
user.erase({
});
Stores的使用(Usage in Stores)
我们想要下载一系列的模型实例并在UI中展示和操作是很常见的。我们通过一个Store来创建:
var store = Ext.create('Ext.data.Store', {
});
//uses the Proxy we set up on Model to load the Storedata
store.load();
一个Store仅仅是一个Model实例的集合--通常是从某个地方的服务器下载的。Store也可以通过一系列的增加,更新和移除Model实例来通过Proxy与服务器保持同步。可以参看Storedocs来了解关于Store的更多信息。
- (文档翻译)Ext.data.Model
- ExtJs学习(一) Ext.data.Model
- Ext.data.Model
- 继承Ext.data.Model
- EXTJS4 Ext.data.TreeStore model
- Extjs4.0数据包(Ext.data.package)以及数据模型(Ext.data.model介绍)详解
- 玩转extjs5之Ext.data.Model和Ext.data.Store(四)
- ExtJS教程(4)---Ext.data.Model之基础应用
- ExtJS教程(5)---Ext.data.Model之高级应用
- ExtJS4学习笔记(十五)---Ext.data.Model
- EXTJS4 新特性之Ext.data.Model
- EXTJS4 新特性之Ext.data.Model
- ExtJs教程----Ext.data.Model的Ajax
- Django文档翻译:模型参考(Model Reference)
- Django文档翻译:模型参考(Model Reference)
- Qt5.5文档翻译---Model/View programming
- 内核文档driver-model/platform.txt翻译
- Data Model(数据模型)
- SQLite
- [Cocos2D-X]在windows8下:VS2012+Cocos2D-X-2.1.4+cygwin创建win32项目
- wikioi1501 二叉树最大宽度和高度
- Cocos2d-x游戏开发之Cocos2dx通过JNI调用Android的Java代码(webView实例)
- android的库引用
- (文档翻译)Ext.data.Model
- 浏览器的user agent stylesheet
- HDU 1157 Who's in the Middle
- Undefined symbols for architecture i386:
- 手动把class文件打成jar
- Android Service Summary
- C++哈希表使用教程(STL)
- VirtualBox虚拟机网络设置(四种方式)
- 浅谈Android选项卡(二)