Ext 3.0新增内容系列文章之二:Ext.data.Writer简介

简介: 上期我们的内容是关于API接口的配置,其中涉及到CRUD只是略略一提,没有谈论太多,今期再重点说说。 根据CRUD 的原则,数据或资源操作不外乎“生、变、见、灭”的四大规律,也就是说,只需要“创建(Create )、获取(Read )、更新 (Update )和销毁(DELETE )”四种行为便可完成对资源的处理和操作了。

上期我们的内容是关于API接口的配置,其中涉及到CRUD只是略略一提,没有谈论太多,今期再重点说说。

根据CRUD 的原则,数据或资源操作不外乎“生、变、见、灭”的四大规律,也就是说,只需要“创建(Create )、获取(Read )、更新 (Update )和销毁(DELETE )”四种行为便可完成对资源的处理和操作了。如果“读”操作在Ext 中没有题的话,那么其他三种操作就应该归类为“写”的操作了。这部分的内容,在Ext 3.0 中将由Writer 来负责完成。Ext.data.DataWriter提供了增、删、改,而“查”的实现让Ext.data.Store与服务端框架密切通讯。Writer控制了Store了自动管理AJAX的请求,让其成为Store CRUD操作的管道。换句话说,这个DataWriter相对于远程CRUD操作而言,是一个在前端的初始化部分,负责写入单个或多个的 Ext.data.Record对象。Ext.data.DataWriter是一个抽象类,一般用于让来被继承,例如 Ext.data.JsonWriter。我们大致看看JsonWriter是怎么完成的。

Writer继承自Object,是一个崭新的Ext.data.*类,先引入一个JsonWriter 实例对象:

var settingsWriter = new Ext.data.JsonWriter({ writeAllFields: true });

设置writeAllFieldstrue 表示,记录所有的字段都会写入到数据库中去。当然,如果有特定ORM 方面,可能就要设置其为false 以适应ORM 的策略。writeAllFields默认是false。设为true的话,就表示让DataWriter返回所有那个记录的所有字段,不仅仅是修改的那些字段。true就是记录那些修改的字段而已。

明显,Writer类的关键方法是write(action, params, rs)方法。action参数代表[CREATE|UPDATE|DESTROY]的字符串,Writer类只需要有DataWriter.update、DataWriter.create、DataWriter.destroy的proxy就可以囊括“写”的操作;params是要写入的hash参数;rs是要写的数据对象(可以为list的数据对象)。Ext.data.DataWriter本身有几个模版方法render()、updateRecord()、createRecord()、destroyRecord(),让继承它的子类重写使用。render()表示写事件的最后动作。将写入的数据对象添加到参数,该方法也说明了送抵的数据对象会依据用户在DataReader配置的元数据信息产生真正的渲染数据,有参数“data”和“params”。

值得一提的是,JsonWriter配置项 true 表示对.DataWriter.toHash()哈希数据进行Ext.util.JSON.encode()。 默认为true 。当使用Ext.data.DirectProxy的时候,不同于Ext.Direct.JsonProvider有自己的JSON编码,所以该配置项要设置为false 。 此外,如果你使用的是Ext.data.HttpProxy,设置该项为false 就会使得HttpProxy采用 Ext.Ajaxrequest配置参数的jsonData传输数据,而非params。 当使用Ext.data.Storerestful的Store,一些服务端框架就会认为数据从jsonData的通道经过。如果采用这样的机制的话,应该让底层的连接对象完成编码的工作(如Ext.Ajax),把encode: 设为false 。

通过proxy对象激活Store对象来控制writer,也就是配置一个url:

var proxy = new Ext.data.HttpProxy({ url: 'app.php/users' });

对于更细颗粒的控制,proxy也可配置成为api,也就是定义CRUD 的资源位置,并告诉ProxyWriter 得知操作地点的URL 。我们的指导思想倾向于与REST 架构的。

var settingsProxy = new Ext.data.HttpProxy({ api: { read: 'app.php/settings/view', create : 'app.php/settings/create', update: 'app.php/settings/update', destroy : 'app.php/settings/destroy' } });

然后就是WriterProxy 组装一起:

var settingsStore = new Ext.data.Store({ id: 'setting', proxy: settingsProxy, reader: settingsReader, writer: settingsWriter, ... });

当上层的组件通过Ext.Writer 来提交某些数据的时候,较理想的方法是统一一个地方来进行数据字段验证的工作。假设有一个名为SettiongGrid ,我们可以这样关联事件(relay events) ,请注意relayEvents()方法的使用:

initComponent : function() { this.viewConfig = { forceFit: true }; this.relayEvents(this.store, ['destroy', 'save', 'update']); this.tbar = this.buildTopToolBar(); SettingsGrid.superclass.initComponent.call(this); }, … …

 

例子方面,Ext 发行包本身就有,我们可以去examples/resetfulexamples/writer 下面看看,简单演示了Rest 资源与MVC 框架是怎么映射其中的资源路径和操作行为的。如果谈到PHP 的框架,这就是一个特定的场合,基本上可以有以下几个类:

 

  • Model         包含ORM 服务的对象
  • Request      处理请求的参数
  • Controller   根据已知url 派遣动作
  • Response    输出符合格式的视图,如JSON

 

通过唯一的切入口来操作整个框架(博主听上去感觉有点好奇),而框架内部的类都是由Controller 来动态加载的,通过某一动作指明不同的类。不过url 就依据URL 映射的使用,表现得千变万化,而切入点就只有一个。

 

部分内容根据jacob.andresen@gmail.com的“CRUD_in_extjs_3_0.pdf”的来源而翻译。

 

目录
相关文章
|
存储 运维 安全
SaaS多租户和单租户的区别解析
SaaS多租户的系统维护成本低,多租户系统在升级时,只需要更新一次,维护人员不需要对每个用户更新,节省了很大的运维成本,这对于所有客户都在做同样事情的系统来说是很有用的。
412 3
|
编解码 人工智能 算法
最新代码开源!TartanCalib:自适应亚像素细化的广角镜头标定
作者测试了三种利用中间相机模型的关键方法:(1)将图像分解为虚拟针孔相机,(2)将目标重新投影到图像帧中,以及(3)自适应亚像素细化。将自适应子像素细化和特征重投影相结合,可将重投影误差显著提高26.59%,帮助检测到最多42.01%的特征,并提高密集深度映射下游任务的性能。最后,TartanCalib是开源的,并在一个易于使用的标定工具箱中实现。作者还提供了一个translation 层和其它最先进的工作,允许使用数千个参数回归通用模型或使用更稳健的求解器。为此,TartanCalib是广角标定的首选工具!
最新代码开源!TartanCalib:自适应亚像素细化的广角镜头标定
|
存储 安全 对象存储
巧用对象存储回源绕过SSRF限制
有时开发对于SSRF的限制可能是简单的禁用内网地址来实现的,这时如果传入一个外网地址,将其重定向至内网地址,则可以绕过限制对内网服务器发出请求。
544 0
巧用对象存储回源绕过SSRF限制
|
自然语言处理 安全 Cloud Native
云原生微服务趋势
微服务行业报告显示,2018-2023 之间微服务增速为 22.4% ,占据亚太地区 35% 的市场份额。阿里微服务 DNS 最佳组合的 star 数高速增长,基本突破 2 万,意味着每年有数万家企业进行微服务架构改造。2020年,27% 用户正在采用服务网格技术,与微服务整体增速相当,逐渐回归理性;37% Ingress 实现选择 Envoy,相较于 2019 年增加 116%。此外, Envoy 社区于 2022 年 5 月推出 Gateway 子产品,通过 Gateway API 推进Ingress 标准化与网关标准化,非常值得关注。
云原生微服务趋势
|
Java Python Spring
如何让python项目花里胡哨
如何让python项目花里胡哨
如何让python项目花里胡哨
|
监控 算法 Java
系统分析垃圾收集器
系统分析垃圾收集器
157 0
系统分析垃圾收集器
|
测试技术
软件测试面试题:没有接口文档,如果做接口测试?
软件测试面试题:没有接口文档,如果做接口测试?
168 0
|
Android开发 iOS开发
构件flutter定位服务
在本教程中,我将向您展示如何从服务中获取您在 Flutter 中的位置。 在 Flutter 中获取您的位置是一项简单的任务。本教程将向您展示如何将位置包包装到易于在您的应用程序中使用的服务中。创建一个新的 Flutter 项目并继续。
204 0
|
人工智能 数据可视化 机器人
聚力新基建 新华三助力成都高新区加速智慧城市建设
5月28日上午,“成都高新区新基建项目发布会(第一批)”在成都高新区网络理政中心正式举行。包括新华三集团在内的一批国内知名龙头企业参加了发布会。
聚力新基建 新华三助力成都高新区加速智慧城市建设
|
Ubuntu Linux 持续交付
开源代码使用Travis CI 之c++ Linux篇
1. Travis CI的作用 Travis CI 官网: https://travis-ci.org/ Travis CI是一个提供持续集成的工具,如果您正在开发一个开源项目,那么Travis CI是一个免费的工具,可以在有push动作时,自动完成编译,编译结果可以通过一个图标来显示。 比如我们在工程的README.md中加入下列代码 [![Build Status](https://

热门文章

最新文章