玩转extjs5之Ext.data.Model和Ext.data.Store(四)

一、Ext.data.Model

       (1)Model代表应用程序管理的一些对象。例如,我们可能会为 我们想在系统中建模的现实世界中的一些物体像使用者、产品和汽车等定义一个Model。这些Model在 模型管理器中注册,被Store使用, 而这些Store又被许多 Ext中许多与数据绑定的组件使用.。

      Model定义为字段、任意方法和与模型相关的属性的集合。例如:

      

Ext.define('User', {
    extend: 'Ext.data.Model',
    fields: [
        {name: 'name',  type: 'string'},
        {name: 'age',   type: 'int', convert: null},
        {name: 'phone', type: 'string'},
        {name: 'addree', type: 'string'}
    ],

    changeName: function() {
        var oldName = this.get('name'),
            newName = oldName + " 六指琴魔";

        this.set('name', newName);
    }
});

   创建模型User的实例并调用我们定义的任何模型的逻辑:

var user = Ext.create('User', {
    name : '六指琴魔',
    age  : 26,
    phone: '13800138000'
});

user.changeName();
user.get('name'); 


(2)Model有内置的验证支持, 通过执行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}/}
    ]
});

通过调用validate函数能简单执行验证, 返回一个Ext.data.Errors 对象:

var instance = Ext.create('User', {
    name: '好源码',
    gender: 'Male',
    username: '六指琴魔'
});

var errors = instance.validate();

二、Ext.data.Store

      (1)Store 大意是: 仓库、存储的意思. Store类封装了一个客户端缓存,用于存储 Model 对象. Stores 通过一个代理 Proxy 来加载数据, 并提供函数来 排序, 过滤 以及查询 内部所包含的 model 实例.
       创建Store非常简单 - 我们只需要传入 Model 以及用来加载/保存 数据的Proxy作为配置项即可:

 // 建立一个store要使用的 model
 Ext.define('User', {
     extend: 'Ext.data.Model',
     fields: [
         {name: 'firstName', type: 'string'},
         {name: 'lastName',  type: 'string'},
         {name: 'age',       type: 'int'},
         {name: 'eyeColor',  type: 'string'}
     ]
 });

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

(2)内联数据

   Store 也可以加载内部指定的数据. 在内部, Store 将我们传入的对象作为data,转换为Model实例。 示例如下:

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

(3)过滤与排序

    Store 可以进行排序和过滤 - 两种操作既可以在本地执行,也可以远程执行. 排序 sorters 和 过滤 filters 都是在 MixedCollection 实例内部执行的, 这种封装使得容易管理和使用. 通常在 Store的配置项中指定 sorters 和 filters 就可以了,当然也可以调用 sort 和 filter 方法:

 var store = Ext.create('Ext.data.Store', {
     model: 'User',
     sorters: [{
         property: 'age',
         direction: 'DESC'
     }, {
         property: 'firstName',
         direction: 'ASC'
     }],

     // 必须包含字母E或者d
     filters: [{
         property: 'firstName',
         value: /Ed/
     }]
 });









ExtJS 中,`store` 是一个非常重要的概念,它是用于存储数据的容器,通常用于存储从后台获取的数据或者本地静态数据。`store` 有以下几个特点: 1. `store` 可以通过 `proxy` 对象从后台获取数据,也可以通过 `data` 对象存储本地静态数据。 2. `store` 可以通过 `reader` 对象解析后台返回的数据,以便填充到 `model` 中。 3. `store` 可以通过 `writer` 对象将 `model` 中的数据保存到后台。 4. `store` 可以触发各种事件,比如 `load`、`add`、`remove`、`update` 等,方便处理数据变化时的业务逻辑。 5. `store` 可以通过 `filter`、`sorter`、`group` 等功能对数据进行过滤、排序和分组,方便数据展示和处理。 在使用 `store` 时,通常需要配置以下几个属性: 1. `model`:指定存储在 `store` 中的数据模型。 2. `proxy`:指定从后台获取数据的方式,可以是 `ajax`、`jsonp`、`rest` 等方式。 3. `reader`:指定解析后台返回数据的方式,通常与 `model` 配合使用。 4. `writer`:指定将 `model` 中的数据保存到后台的方式。 5. `fields`:指定存储在 `store` 中的数据模型的字段。 6. `listeners`:指定 `store` 的事件监听器。 7. `autoLoad`:指定是否在创建 `store` 时自动加载数据。 8. `pageSize`:指定 `store` 分页时每页显示的记录数。 当你需要在 ExtJS 中存储数据时,`store` 就是一个非常好的选择。它提供了众多功能,方便你处理数据的各种需求。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墨鱼老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值