首页 > 其他分享 >ExtJs开发教程_001_Ext.data.Store使用方法详解

ExtJs开发教程_001_Ext.data.Store使用方法详解

时间:2024-07-12 19:56:01浏览次数:9  
标签:name type json 001 data Ext 数据

本系列教程基本可以看做是ExtJS API中文版+实例演示

更多内容请参看:http://www.cnblogs.com/mrye

Ext.data.Store 用法介绍

这个组件继承自Ext.data.AbstractStore

 本篇讲解了如何构造并且做一些基本使用,如果有什么疑问可以联系我QQ1330771552

下面是他的属性列表

?
autoLoad  //是否自动加载 autoSync //是否自动同步 buffered //允许缓冲(官方有个5000条数据的例子可以参看) clearOnPageLoad //是否在加载新数据的时候清空旧数据 clearRemovedOnLoad//加载的时候把删除掉的数据彻底删除(所谓删除掉的数据是指store.remove()) data//数据 fields//解析数据的字段 filters//过滤器(可以参看Ext.util.Filter和Ext.ux.grid.filter.Filter) groupDir groupField//用哪一个字段分组 leadingBufferZone//缓冲的情况下,最多缓冲多少行 listeners//监听器,可以指定各种on事件 model//解析数据的模型,模型可以代替proxy和fields配置 pageSize//每页显示多少条数据 proxy//数据代理(其实就是发送ajax来请求数据用的) purgePageCount//多少页清除一次缓存数据(具体是和缓冲结合使用,本文不介绍缓冲) remoteFilter//这个属性会往服务器发送过滤条件 remoteGroup//往服务器发送分组条件(同上,做法就是表单参数提交到后台) remoteSort//往后台发送排序条件 sortOnFilter//排序的时候进行过滤 storeId//唯一标示,让Ext.data.StoreManager来管理用的 trailingBufferZone//缓冲多少条

 

?
// 本页的全局pageSize var PAGESIZE = 20;   var demoStore = Ext.create('Ext.data.Store', {            // fields一定要明确指定type,这样有很多好处,比如filter能直接设为true,便会默认按照store-fields设置好的type来确定filter的类型。            fields : [{                      name : 'primaryKey',                      type : 'int'                   },{                      name : 'price',                      type : 'float'                   }, {                      name : 'productName',                      type : 'string'                   }, {                      name : 'title',                      type : 'string'                   }, {                      name : 'buyDate',                      type : 'date',                      dateFormat : 'Y-m-d'// 此处可以避免IE下日期出现错误nan                   }],            // 数据代理服务            proxy : {               type : 'ajax',// 使用ajax请求                url :'/read/demo/product.action',// 请求后台读取数据的地址               // 读取数据的工具(数据代理)               reader : {                   // 读取方式按照json字符串格式读取                   type : 'json',                   // json解析成js对象之后读取所有数据(通常是数组)的属性名称。                   root : 'root',                   // json解析成js对象之后读取数据总条数的属性名称                   totalProperty : 'totalProperty'               }            },            // 自动加载            autoLoad : true,            // 每页显示多少条            pageSize : PAGESIZE        });          // 商品grid        Var demoGrid = Ext.create('Ext.grid.Panel', {                   // 不要边框能好看一些                   border : false, //用来进行选择的选择器                   selModel : Ext.create('Ext.selection.CheckboxModel'),                   // 所使用的数据源                   store : renYuanStore,                   // 创建列详细可以参看renYuanColumns函数                   columns : renYuanColumns(),                   // 需要分页、全显示按钮                   pageChange : true,                   // 底部toolbar,不需要进行后处理。所以使用“匿名类”                   bbar : [{                             // 控件类型pagingtoolbar                             xtype : 'pagingtoolbar',                             // 这个属性好像在extAPI中没写,但是不写还不行。能控制ProgressBarPager。不然ProgressBarPager会出bug                             pageSize : PAGESIZE,                             // 所使用的数据源                             store : renYuanStore,                             // 因为Ext.ux.LiveSearchGridPanel默认把tbar和bbar占用了。所以只能使用dockedItems添加toolbar                             dock : 'bottom',                             // 插件,使用ProgressBarPager插件,显示进度条                             plugins : Ext.create('Ext.ux.ProgressBarPager')                          }],                   // 添加双击编辑事件监听器                   listeners : {                      itemdblclick : function() { // editBtn是编辑按钮。此处做法目的是双击数据进行编辑                          editBtn.handler();                      }                   }               });

 

该组件相当于一个数据源,能够给很多呈现数据的组件提供数据。

核心工作过程是:

首先请求后台读取数据,接受后台返回的数据(其实就是个字符串)

然后按照指定格式解析数据。通常默认格式为json

我们可以自定义解析规则。详细参看Ext.data.reader.Reader

最后把解析好的数据转换成Ext.data.Model实例

我们可以自定义模型。

?
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);     } });

 

 

通常重复打开定义了Ext.data.Model的页面(就是加载js)会出现一个错误,大致意思是说,重复定义某个类了。

我们可以这样避免这个问题

?
Var exitModel=Ext.ModelManager.get(‘modelId’)//此处modelId是你自己给自己定义的model指定的ID。('User')
?
//如果不知道exitModel是什么类型,为什么可以直接取反,请参看js基础(js中 nan,undifined,null,0,‘’都是互通的)
?
If(!exitModel){
?
//TODO 在这里定义你的model <br>}

 

自定义模型之后就可以使用该模型来构造store

改写上面的store

?
Ext.define('ProductModel', {      extend: 'Ext.data.Model',      fields: [{                      name : 'primaryKey',                      type : 'int'                   },{                      name : 'price',                      type : 'float'                   }, {                      name : 'productName',                      type : 'string'                   }, {                      name : 'title',                      type : 'string'                   }, {                      name : 'buyDate',                      type : 'date',                      dateFormat : 'Y-m-d'// 此处可以避免IE下日期出现错误nan                   }]  });     var demoStore = Ext.create('Ext.data.Store', {      model: 'ProductModel',      // 数据代理服务     proxy : {               type : 'ajax',// 使用ajax请求                url :'/read/demo/product.action',// 请求后台读取数据的地址               // 读取数据的工具(数据代理)               reader : {                   // 读取方式按照json字符串格式读取                   type : 'json',                   // json解析成js对象之后读取所有数据(通常是数组)的属性名称。                   root : 'root',                   // json解析成js对象之后读取数据总条数的属性名称                   totalProperty : 'totalProperty'               }            },            // 自动加载            autoLoad : true,            // 每页显示多少条            pageSize : PAGESIZE        });

 

 

写上面的store,这样是不是比原来简单多了,而且更清晰了。

其实proxy属性也可以定义在model中。

只是通常不建议这么做。因为模型就是模型,他的数据代理是数据源赋予的。这样也能让我们的程序中,可以定义很多的模型,然后根据需要选择模型来搭配代理,从而为同一个模型赋予不同的后台读取操作。

 

 

 

针对store的各种方法合理使用,我会根绝需要在后续篇章中进行讲解。

标签:name,type,json,001,data,Ext,数据
From: https://www.cnblogs.com/joe-tang/p/7144878.html

相关文章

  • ExtJs常用布局--layout详解(含实例)
    序言:笔者用的ExtJs版本:ext-3.2.0ExtJs常见的布局方式有:border、form、absolute、column、accordion、table、fit、card、anchor另外,不常见的布局有:tab、vbox、hbox本文所有实例代码已提供下载,下载链接:ExtJs常用布局--layout详解实例代码 简介:最常用的边框布局——BorderLa......
  • ExtJS中layout的12种布局风格
    extjs的容器组件都可以设置它的显示风格,它的有效值有absolute,accordion,anchor,border,card,column,fit,formandtable. 一共9种。另外几种见: http://www.sencha.com/deploy/dev/examples/layout-browser/layout-browser.html 里面有详细的例子。 ·  absol......
  • extjs中treepanel例子
    :TreePanel继承自Panel,在ExtJS中使用树控件含有丰富的属性和方法实现复杂的功能。其中Ext.tree.TreeNode代表一个树节点,比较常用的属性包括text、id、icon、checked等、异步树Ext.tree.AsyncTreeNode、树加载器Ext.tree.TreeLoader。下面介绍几个extjs中treepanel例子一、TreePan......
  • Extjs xtype 一览表
    ExtJs xtype一览基本组件:xtypeClass描述buttonExt.Button按钮splitbuttonExt.SplitButton带下拉菜单的按钮cycleExt.CycleButton带下拉选项菜单的按钮buttongroupExt.ButtonGroup编组按钮(Since3.0)slider......
  • Extjs中的success和failure
    转载:http://blog.csdn.net/gangwazi0525/article/details/7314581 1.Ext.form.Action.Submit的配置选项success、failure根据返回json中success属性判断的,如果success为true,则success,false则failure,如果无json中无success属性,failure,故要提示操作是否成功,必须要返回success......
  • 轻松掌握useAsyncData获取异步数据
    title:轻松掌握useAsyncData获取异步数据date:2024/7/12updated:2024/7/12author:cmdragonexcerpt:摘要:本文详细介绍Nuxt.js中的useAsyncData组合式函数,它用于在服务端渲染(SSR)过程中异步获取数据,确保客户端正确水合,避免重复请求。内容包括基本概念、参数说明(key,ha......
  • EXTI的标准库编程
    1 EXTI的编程接口        2初始化EXTI_Init EXTI_InitTypeDef结构体定义3   实验简介 4 思路梳理  中断通道开启6EXTI通道配置  ......
  • [1032] SQLAlchemy—the magical bridge between Python and databases!
    Ah,SQLAlchemy—themagicalbridgebetweenPythonanddatabases!......
  • Xamarin.Android -- EditText输入无法实时显示问题
    参考文章:EditText输入内容不显示_edittext输入没有显示-CSDN博客https://blog.csdn.net/guodashen007/article/details/108768508scrollview内嵌tablelayout布局,tablerow内嵌EditText,EditText输入后文字不显示,因为安卓9以上会出现不兼容问题,后在配置文件增加硬件加速属性解决。E......
  • datawhale第二期夏令营基于术语词典干预的机器翻译挑战赛——baseline【笔记】
    嗨!大家好,这一期我们来看一下夏令营所提供的baseline。首先,baseline是什么对于很多第一次参加datawhale夏令营的小伙伴,看到手册里发布的baseline,都会有这样的疑问。baseline是跑通比赛的第一个代码,里面用到的算法不会很复杂,更基础一些;本次baseline是构建和训练一个基于PyTorc......