数据

翻译 2012年03月29日 23:07:45

数据

数据包是什么加载和保存在您的应用程序的所有数据,包括41类,但有三个是比其他更重要- 模型商店Ext.data.proxy.Proxy的使用这些几乎每一个应用程序,并支持卫星类:

模型和存储

数据包的核心是Ext.data.ModelA型代表某些类型的应用程序中的数据-例如,一个电子商务应用程序可能有用户,产品和订单的模式。在其最简单的模型仅仅是一个领域和他们的数据集。我们要看看在四个模型的主要部分- 领域代理协会验证

让我们来看看如何现在我们创建了一个模型:

Ext.define('User', {
    extend: 'Ext.data.Model',
    fields: [
        { name: 'id', type: 'int' },
        { name: 'name', type: 'string' }
    ]
});

模型通常用一个商店,基本上是一个模型实例的集合。设立商店和装载它的数据是简单的:

Ext.create('Ext.data.Store', {
    model: 'User',
    proxy: {
        type: 'ajax',
        url : 'users.json',
        reader: 'json'
    },
    autoLoad: true
});

我们我们的商店配置使用Ajax代理,告诉它的URL加载数据和阅读器,用于解码数据。在这种情况下,我们的服务器返回JSON,所以我们已经成立了一个JSON Reader来读取响应。商店自动加载了一套从URL中的用户模型实例users.jsonusers.json URL应该返回一个JSON字符串,它看起来像这样:

{ 
    成功 为true 
    用户 [ 
        { ID  1 名称 “爱德”  },
        { ID  2 名称 “汤米”  } 
    ] 
}

对于现场演示,请参阅简单的商店示例。

内联数据

商店也可以载入数据联。内部,商店作为传递的对象,我们每个转换数据模型的实例:

Ext.create('Ext.data.Store', {
    model: 'User',
    data: [
        { firstName: 'Ed',    lastName: 'Spencer' },
        { firstName: 'Tommy', lastName: 'Maintz' },
        { firstName: 'Aaron', lastName: 'Conran' },
        { firstName: 'Jamie', lastName: 'Avins' }
    ]
});

内联数据示例

排序和分组

商店是能够进行排序,筛选和分组本地,以及支持远程排序,筛选和分组:

分机创建Ext.data.Store'  { 
    模型 “用户” 

    分拣机 [ '名称'  'ID' ],
    过滤器 { 
        属性 '名称'  “爱德” 
    },
    groupField  “年龄” 
    groupDir  “倒序” 
});

我们刚刚创建的存储,数据将被排序的第一个名称,然后ID,它会被过滤,只包括“爱德”的名称和数据将被递减的顺序按年龄分组的用户。这很容易改变排序,过滤和分组在任何时间通过存储API。对于现场演示,看到的排序分组过滤商店的例子。

代理

代理所使用的存储处​​理模型数据加载和节能。有两种类型:代理客户端和服务器。客户端代理的例子,包括数据存储在浏览器的内存和本地存储,使用HTML 5的本地存储功能可用时的记忆。服务器代理处理一些远程服务器编组的数据和例子包括阿贾克斯,JSONP和休息。

代理可以直接定义一个模型,像这样:

Ext.define('User', {
    extend: 'Ext.data.Model',
    fields: ['id', 'name', 'age', 'gender'],
    proxy: {
        type: 'rest',
        url : 'data/users',
        reader: {
            type: 'json',
            root: 'users'
        }
    }
});

/ /使用用户模型的代理
分机创建Ext.data.Store'  { 
    模型 “用户” 
});

这有助于我们在两个方面。首先,它很可能是每家商店使用的用户模型,将需要加载的数据相同的方式,使我们避免重复每个商店的代理定义。第二,我们现在可以载入和保存模型数据没有存储:

/ /给了我们一个用户类参考
VAR  用户 =  分机ModelMgr getModel '用户' );

VAR ED =  20070114 创建'用户'  { 
    名称 “埃德斯宾塞
    年龄 25 
});

/ /我们可以节省直接,而无需添加他到商店,因为我们
/ /配置RestProxy会自动发送一个POST请求的URL /用户保存({ 
    成功 函数ED  { 
        控制台日志“保存埃德他的身份证!” 的getId ()); 
    
} } );

/ /加载用户1,用它做的东西(执行1 GET请求/用户/ 1)
用户负载1  { 
    成功 功能用户 { 
        控制台日志“加载的用户1:”  + 用户'名称' )); 
    } 
});

也有代理,利用HTML5的新功能优势- LocalStorageSessionStorage的虽然旧的浏览器不支持HTML5的这些新的API,他们是那么有用了很多的应用,将受益于他们的存在极大。

模型的例子,直接使用代理

协会

协会API模型可以连在一起。大多数应用程序处理许多不同的模式,几乎都是有关模型。博客创作应用程序可能有用户,文章和评论的模式。每个用户创建数和每个职位收到的评论。我们可以表达像这样的关系:

Ext.define('User', {
    extend: 'Ext.data.Model',
    fields: ['id', 'name'],
    proxy: {
        type: 'rest',
        url : 'data/users',
        reader: {
            type: 'json',
            root: 'users'
        }
    },

    对于hasMany  “邮报”  / /速记:“邮报”,名称:模型'职位'} 
});

分机定义'贴'  { 
    延长 “Ext.data.Model' 
    字段 [ 'ID'  'USER_ID'  '标题'  '身体' ],

    proxy: {
        type: 'rest',
        url : 'data/posts',
        reader: {
            type: 'json',
            root: 'posts'
        }
    },
    belongsTo: 'User',
    hasMany: { model: 'Comment', name: 'comments' }
});

分机定义'评论'  { 
    延长 “Ext.data.Model' 
    字段 [ 'ID'  '的post_id'  '名'  '消息' ],

    belongsTo的: 'POST'  
});

可以很容易地表达您的应用程序中的不同型号之间的丰富关系。每个模型可以与其他车型有任何关联的数目和你的模型可以定义任何顺序。一旦我们有一个模型实例,我们可以很容易地遍历相关的数据 - 例如,如果我们想要记录每个岗位上作出的一个给定用户的所有意见,我们可以这样做:

/ /加载用户ID为1的相关文章和评论,使用用户的代理
用户 
    成功 功能用户 { 
        控制台日志“用户:”  + 用户'名称' ));

        用户职位()。每个函数 { 
            控制台日志“发表评论:”  + 职位'标题' ));
功能评论 { 
                控制台日志评论'消息' )); 
            }); 
        }); 
    
} } );

每个以上结果,我们创造了一个新的功能被添加到模型的hasMany协会。我们宣布我们在上面的片段,每一个用户模式的hasMany文章,其中新增的user.posts()的功能。调用user.posts()返回一个存储配置与Post模型。反过来,邮政模型得到1 评论()函数,因为对于hasMany评论协会成立。

协会是加载数据的不只是帮助 - 他们是太有用创造新的记录:

用户职位。()({ 
    标题 “Ext JS的4.0 MVC架构
    身体 '\'一个伟大的想法,构建您的Ext JS的应用,利用内置在MVC架构......“ 
});

用户职位(1)同步();

在这里,我们实例化一个新的岗位,这是自动获得用户ID user_id字段。调用同步()保存新的邮政通过其配置的代理 - 这,又是一个异步操作,如果操作完成时,要通知,你可以传递一个回调。

belongsTo的关联模型也产生新的方法,这里我们可以如何使用这些:

/ /获得用户参考后的belongsTo关联的getUser 函数用户 { 
    控制台日志刚刚从后用户参考:'  + 用户获得'名称' ))
});

/ /尝试改变后的    
          用户更新' ); 
        }   { 
            控制台日志邮政\“用户不能更新' ); 
        
    } } 
});

再次,加载函数(的getUser)是异步的,需要一个回调函数来得到用户实例。SETUSER方法简单更新foreign_key(在这种情况下的user_id)到100,并保存后的模型。像往常一样,回调可以通过在已完成保存操作时,将触发 - 无论成功与否。

载入中嵌套数据

你也许会奇怪,为什么我们通过了一项成功的功能的User.load呼叫,但没有访问用户的文章和评论时,这样做。这是因为上面的例子中,假定当我们提出要求得到用户的服务器返回的用户数据 ​​,在所有嵌套的文章和评论。通过成立协会象我们上面那样,该框架可以自动解析出嵌套在一个单一的请求数据。而不是使用户数据 ​​,另外的文章数据,然后更多的请求加载每发表的评论的请求,我们可以返回所有的数据,在这样一个单一的服务器响应:

{ 
    成功 为true 
    用户 [ 
        { 
            ID  1 
            名称 “爱德” 
            年龄 25 
            性别 “男性” 
            职位 [ 
                { 
                    ID     12 
                    标题 “所有数据在Ext JS 4 
                    身体 “已经看到最改进的一个领域......” 
                    评论 [ 
                        { 
                            ID  123 
                            名称 “乔布斯” 
                            消息 “还有一件事' 
                        } 
                    ] 
                } 
            ] 
        } 
    ] 
}

数据全部自动解析框架。可以很容易地配置模型的代理加载数据从几乎任何地方,和他们的读者来处理几乎任何响应格式。至于用Ext JS 3,模型和商店都使用整个框架由许多组件这样一个网格,树和形式。

协会和验证的关系的模型,使用工作的例子演示。

当然,它可能在非嵌套的方式来加载数据。这可能是有用的,如果你需要“懒加载”的关系数据,只有当它需要。就让我们像以前加载的用户数据 ​​,除非我们假设响应只包含用户数据 ​​没有任何相关文章。然后我们将添加一个调用user.posts(),load()方法。在我们得到相关的POST数据的回调:

/ /载入ID用户的代理用户
负载1  { 
    成功 函数用户 { 
        控制台日志“用户:”  + 用户'名称' ));

        用户1 / /加载的职位,使用邮政的   
                  文章:“  + 职位'标题' ));
功能评论 { 
                        控制台日志评论'消息' )); 
                    }); 
                }); 
            
        } } ); 
    
} } );

对于一个完整的例子见懒惰协会

验证

4种型号的Ext JS验证其数据的支持更丰富,成为了很多。为了证明这一点,我们要建立在以上协会的例子,我们使用。首先,让我们添加一些验证的用户模型:

分机定义'用户'  { 
    延长 “Ext.data.Model' 
    字段 ...

    validations: [
        {type: 'presence', name: 'name'},
        {type: 'length',   name: 'name', min: 5},
        {type: 'format',   name: 'age', matcher: /\d+/},
        {type: 'inclusion', name: 'gender', list: ['male', 'female']},
        {type: 'exclusion', name: 'name', list: ['admin']}
    ],

    代理 ... 
});

验证字段定义遵循相同的格式。在每一种情况下,我们指定一个字段和一个验证类型。在我们的例子中验证期待name字段是目前至少有5个字符长度,年龄字段是一个数字,无论是“男性”或“女”性别领域,用户名是任何东西,但“管理员”。有些验证采取额外的可选配置 - 例如长度验证,可以采取min和max属性,格式匹配,等有五个Ext JS的内置验证,并添加自定义的规则是很容易的。首先,让我们迎接建权:

  • 存在的根本保证该字段有一个值。不要零计数作为一个有效的价值,但空字符串。
  • 长度确保一个字符串之间的最小和最大长度。这两个约束是可选的。
  • 格式可确保一个字符串匹配一个正则表达式格式。在上面的例子中,我们确保年龄字段是由至少一个字母后面的4个数字。
  • 列入确保值是在一个特定的值(例如确保性别是男性或女性)集。
  • 排除,确保值是没有一套具体的值(例如像“管理员”黑名单用户名)之一。

现在,我们已经掌握不同的验证做什么,让我们尝试对用户实例中使用它们。我们将创建一个用户,并针对它运行的验证,并指出任何故障:

/ /现在让我们试着创建一个新用户,许多验证错误,我们可以
var目录NEWUSER =  20070114 创建'用户'  { 
    名称 'admin'的
    年龄 二十九个' 
    性别 '不是一个有效的性别' 
});

/ /我们刚刚创建的新用户上运行一些验证
VAR 错误= NEWUSER 验证();

控制台日志用户有效吗?“ 错误参考isValid ());  / /返回“假”,因为有验证错误
控制台日志“所有错误” 错误项目);  / /返回的数组这个模型的实例上发现的所有错误

控制台日志“时代错误” 错误getByField '年龄' ));  / /返回的年龄字段错误

这里的关键功能的validate(),它运行的所有配置的验证,并返回一个错误对象。这个简单的对象只是一个集合被发现的任何错误,再加上一些方便的方法,如参考isValid() -返回true,在任何领域,如果有任何错误- getByField() 返回某一特定领域的所有错误。

对于一个完整的例子,它使用验证,请参阅协会和验证

数据!数据!

----总喜欢在结束的时候写点感想,也算是漫谈吧---- **这次暑期实训算是大数据刚刚入门,以后发展的道路还很长,要解决的问题还很多,也会更艰难,但我仍会坚持下去。其实坚持的背后一定有很多因素在支...
  • oba_gaga
  • oba_gaga
  • 2016年07月19日 19:02
  • 321

数据流程图与数据字典

一、数据流程图:          是便于用户理解,分析系统数据流程的图形工具,它摆脱了系统的物理内容,精确地在逻辑上描述系统的功能、输入、输出和数据存储等,是系统逻辑模型的重要组成部分。      ...
  • hy6688_
  • hy6688_
  • 2013年10月26日 09:12
  • 4589

大数据与小数据

开始文章之前,先声明一下,文章的内容有的是大虾自己的理解,也有是网络上的内容,但是尽量不会去做大段的复制,如果实在有雷同得太厉害的,纯粹巧合。另外文章中的观点仅代表我个人想法,不对正确与否负责,希望有...
  • allenlu2008
  • allenlu2008
  • 2014年08月14日 21:53
  • 2034

Java中数据数据存储

注:仅是整理总结,发现错误之处望及时告知,感激不尽。今日看到关于常量池、堆的东西,发现心里一点概念也不记得了,故做次笔记加深印象。 一、Java中数据存放的位置 (缺少硬件部分的关联) 1、寄存器 —...
  • CSS0874
  • CSS0874
  • 2017年04月07日 21:11
  • 116

数据探索之数据预处理

数据探索步骤 查看单个变量的分布情况,了解每一个变量值的分布情况并找出缺失值和离群点,以确定变量是否需要进行转换或者是否应该用于建模; 查看目标变量(因变量)与预测变量(自变量)之间的关系,用于特征选...
  • weixin_38985053
  • weixin_38985053
  • 2017年10月23日 21:54
  • 60

数据挖掘-数据探索

数据探索         根据观测、调查收集到初步的样本数据集后,接下来要考虑的问题是:样本数据集的数量和质量是否满足模型构建的要求?有没有出现从未设想过的数据状态?其中有没有什么明显的规律和趋势?...
  • u013153546
  • u013153546
  • 2016年04月27日 21:35
  • 1805

数据挖掘导论--数据

数据挖掘导论–数据本Markdown编辑器使用[StackEdit][6]修改而来,用它写博客,将会带来全新的体验哦: 写在前面的话:学习过的知识不常用就会生疏,概念的东西特别容易遗忘,还是老老实实...
  • czwhczwh75
  • czwhczwh75
  • 2016年04月21日 23:38
  • 120

数据采集器之数据解析

数据分发 前一篇文章已经说了数据采集器的背景以及设计原理,接下将说明数据采集的数据分发思想               核心实现         RouterMonitor 方法 doRouter()...
  • qzshiyongjie123
  • qzshiyongjie123
  • 2016年06月01日 19:10
  • 698

大数据呀大数据

直观的包含关系大体如下: 大数据>云计算(分布式计算)>数据挖掘>粒计算>粗糙集理论         大数据要解决的技术问题很广,包括系统架构、分布式计算、操作系统、软件设计模式,需要理论和实际的创新...
  • WUMingZhanWei
  • WUMingZhanWei
  • 2014年03月23日 17:01
  • 726

数据挖掘之数据预处理

一个数据挖掘项目,是一项庞大的工程。很多时候,我们都太在意使用什么算法、什么分析工具去得到好的一些隐含的模式或者规律,事实上关于数据的预处理,即根据业务需求,从不同的业务数据库中抽取不同的数据表,我们...
  • stone_mad
  • stone_mad
  • 2015年10月25日 22:36
  • 358
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据
举报原因:
原因补充:

(最多只允许输入30个字)