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

上期我们的内容是关于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
});

设置writeAllFields
为true
表示,记录所有的字段都会写入到数据库中去。当然,如果有特定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
的资源位置,并告诉Proxy
让Writer
得知操作地点的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'
}
});

然后就是Writer
、Proxy
组装一起:

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/resetful
和examples/writer
下面看看,简单演示了Rest
资源与MVC
框架是怎么映射其中的资源路径和操作行为的。如果谈到PHP
的框架,这就是一个特定的场合,基本上可以有以下几个类:

 

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

 

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

 

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

 

时间: 2024-09-16 00:40:36

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

Ext 3.0新增内容系列文章之一:Ext.data.Api快速一睹

为了确保开发者的DataProxy API使用无误,我们定义了Ext.data.Api单例管理这些数据的API.除了创.见.变.灭的这四种CRUD操作进行了定义之外,还分别将这些操作映射到了RESTful的HTTP方法:GET.POST.PUT和DELETE.   我们不妨打开源码看看.var validActions = {}就是保存"反转Ext.data.Api.actions的哈希表hash",即value变为是key.本单例的一些方法(如getActions.getVerb)会

Ext 3.0新增内容系列文章之三:DWR的替代品Ext.Direct

上一期的内容谈了DataWriter,实质是与DataReader相对应的产物.今期咱们讲Ext.Direct的内容,无论DataWriter还是Ext.Direct我们都可以先检查一下官方所提供的例子,结合本文,加深理解.   Ext.Direct的目的在于提供一个无缝的通讯流(streamline)介乎于客户端和服务端之间,形成一种单一的接口,从而使得我们减少一些乏味的编码,例如数据的验证和出来返回的数据包(读数据.错误条件等等).Ext.direct命名空间下有若干的类是为了与服务端更密切

MongoDB系列教程(二):MongoDB简介_MongoDB

MongoDB介绍           MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的.他支持的数据结构非常的松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型.MongoDB最大的特点是他支持的查询语言是非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引.它的特点是高性能.易部署.易使用,存储数据非常方便. MongoDB功能特性      1.面

稳扎稳打Silverlight 3.0系列文章索引

相关文章:稳扎稳打Silverlight 2.0系列文章索引 在线DEMO http://www.cnblogs.com/webabcd/archive/2009/08/04/1538238.html 1.稳扎稳打Silverlight(33) - 3.0控件之AutoCompleteBox,DataPager 介绍 Silverlight 3.0 控件一览: AutoCompleteBox - 自动完成控件.当用户输入部分信息后,此控件可以基于指定的过滤算法在一个下拉框中陈列出匹配项 Data

IT软件人员的技术学习内容(写给技术迷茫中的你) - 项目管理系列文章

前面笔者曾经写过一篇关于IT从业者的职业道路文章(见笔者文:IT从业者的职业道路(从程序员到部门经理) - 项目管理系列文章).然后有读者提建议说写写技术方面的路线,所以就有了本文.本文从初学者到思想者的四步方面对IT从业者的技术路线做了阐述(见笔者文:IT从业者的学习规划 - 学习者系列文章开篇),从浅到深的对技术路线需要学习的内容做了叙述,后续会对学习者系列文章进行书写,本文就当做该系列文章的一个版图吧. 对于技术路线,笔者认为,在工作之余,就该自我主动的去学习技术和业务方面的知识.一方面是

Asp.net MVC2.0系列文章-显示列表和详细页面操作

上一篇文章,我们简单地完成了新闻的添加操作(Asp.net MVC2.0系列文章-添 加操作)此篇文章,我们使用Asp.net MVC2.0实现新闻清单的展示和新闻详细页面 . 创建View视图Index和NewsDetails 创建新闻首页,用来显示新闻列表. 在Views/News目录下,单击右键,选择Add->View,修改相关配置如下图所 示 在生成的HTML代码中,进行相关展示方面的修改.主要代码如下: <% foreach (var item in Model) { %> &

8、项目管理基本内容 - 项目管理系列文章

在前面的项目管理系列文章中,笔者已经对项目管理的项目组的相关管理内容做了介绍,从最基本的招聘,到相关的项目组管理方法等都有描述.今天本文就从项目组管理的基本内容出发,对项目的管理内容做个基本介绍. 一.项目业务文档编写: 项目文档是项目的最基本内容,其主要是根据项目经理与项目的业务需求人员进行沟通之后进行编写的内容,就是项目的业务文档,描述了项目的具体功能需求内容,也是项目进行开发的具体内容,项目组与业务人员进行沟通交流的基石.   二.项目的基本原型内容编写: 在进行了项目业务文档记录之后,如

Dreamweaver 4.0 新增功能全接触

dreamweaver MacroMedia公司在2000年11月13日发布了Dreamweaver 4.0,它的出现把Dreamweaver的竞争对手远远甩在了后面,稳坐可视化网页编辑软件的头把交椅,作为Dreamweaver 3.0 的升级产品Dreamweaver 4.0并没有质的飞跃,它基本保持了Dreamweaver3.0的界面风格,唯一不同的是多了几个浮动面板,要是不太细心的话还以为是Dreamweaver3.0,Dreamweaver4.0到底有什么新东东?让我来给您详细介绍Dre

Dreamweaver 4.0 新增功能全接触(图)

dreamweaver   MacroMedia公司在2000年11月13日发布了Dreamweaver4.0,它的出现把Dreamweaver的竞争对手远远甩在了后面,稳坐可视化网页编辑软件的头把交椅,作为Dreamweaver3.0的升级产品Dreamweaver4.0并没有质的飞跃,它基本保持了Dreamweaver3.0的界面风格,唯一不同的是多了几个浮动面板,要是不太细心的话还以为是Dreamweaver3.0,Dreamweaver4.0到底有什么新东东?让我来给您详细介绍Dream