ExtJs的CRUD操作及sync()的作用

CRUD操作指的是create , update,read , destroy四个操作。指的是对ExtJs的前台数据Store的增加,修改,加载(load,也可以说是查询),删除四个操作。下面先看使用实例,首先要现在store里面定义api。
 var grid = Ext.create('Ext.tree.Panel', {
            store:Ext.create('Ext.data.TreeStore', {
                autoLoad:true,
                model: 'home.menu',
                root:{
                    menu_id:0,
                    menu_name:'ROOT'
                },
                proxy:{
                    type:'ajax',
                    api:{
                        create:'create.action',
                        update:'update.action',
                        read:'read.action',
                        destroy:'destroy.action'
                    },
                    reader:{
                        root:'result',
                        totalProperty:'totalCount'
                    }
                }
            }),

上面代码的意思是在store中定义当我们对store进行add(),updaterecord(),load(),remove()四个操作时相对应的操作URL。下面是extjsAPI里面的定义

api : Object

指定的urls中所调用的CRUD,即"create","read","update"和"destroy"操作方法。默认为:

api: {
    create  : undefined,
    read    : undefined,
    update  : undefined,
    destroy : undefined
}

该url的生成基于使用对应的api属性中所执行[create|read|update|destroy]的动作action, 或者如果为undefined则默认为已配置的 Ext.data.Store.url。

示例:

api: {
    create  : '/controller/new',
    read    : '/controller/load',
    update  : '/controller/update',
    destroy : '/controller/destroy_action'
}

如果指定的URL对于所给定CRUD动作为undefined, 那么CRUD的action请求将指向已配置的url。
下面是使用的DEMO、

修改(update   U):

form.getForm().updateRecord(form.getForm().getRecord());
grid.getStore().sync();
删除(destory  D)

var r = form.getForm().getRecord();
r.remove();
grid.getStore().sync();
加载(Read   R )

 grid.getStore().load();

增加(Create  C)

grid.getStore().add(form.getForm().getValues());
grid.getStore().sync();
不懂大家注意到了没有 在CUD操作后,都有一个sync()操作。如果在store中设置了autoSync:true的话。就可以省略sync()操作。下面是autoSync的API解释:
 : Boolean
  
  

'true'表示每当对一条Record记录完成修改后, 都将对Store与Proxy进行同步. 默认为'false'.

Defaults to: false

最后还有一点需注意的是:除了R是get请求外,CUD操作传到后台的数据都是以字符流的形式传输的。不是以post/get的方式传输的。所以在后台接收的时候,需要注意。下面给出一段PHP接收CUD传送的数据的代码:

public function getPut()
    {
        $raw = '';
        $fp = fopen('php://input', 'r');
        while ($kb = fread($fp, 1024)) {
            $raw .= $kb;
        }
        $params = json_decode($raw, true);
        if (count($params) && !isset($params[0])) {
            $params = array($params);
        }
        $_POST['php_input'] = $raw;
        return $params;
    }
基本上CRUD的操作的注意点都在这里了。不足的我会慢慢补充,求指正


由于lazarus中的例子: lazarus\fpc\2.6.0\source\packages\fcl-web\examples\webdata\demo 用的extjs是3.4版,在新的extjs4.2环境下不能运行,费了好大劲,终于搞定。期间到laz英文论坛提问,可能跟我英文差有关吧,一个回答的都没有。搞定后,版主又要我进行了“ open a new issue in the bugtracker and add a diff with the changes ”。本着互助、共享的原则,整个东西放到lazarus中文社区论坛,欢迎大家不断改善源码,提高性能,并且将改善后的源码进行共享。 我的环境:winxp,lazarus1.1,fpc2.6.0,apache2.2,extjs4.2。 不要犯怵,安装配置很简单,运行这个demo一行代码都不需要编写。后面我会详细讲安装运行方法。 安装配置: 1、安装Apache。下载地址:http://www.fayea.com/apache-mirror//httpd/binaries/win32/httpd-2.2.22-win32-x86-openssl-0.9.8t.msi 其他版本我没试过,高版本的应该可以。 我安装到了D:\apache2.2 2、下载安装Extjs4.2。下载地址:http://cdn.sencha.io/ext-4.2.0-beta.zip?ref=extjs.org.cn 下载后,解压缩,文件夹复制到 D:\apache2.2\htdocs\,然后改名为Ext。 3、下载附件。 原来的lazarus demo 源码未做任何修改,直接编译即可。编译之前需要安装weblaz和lazwebextra两个包。 本文附件中已经有extgrid.exe,可以直接使用。 将extgrid.exe和users.dbf复制到 apache2.2\cgi-bin 目录下。 将附件中其余文件复制到 apache2.2\htdocs\demodbf 目录下。 好了,全部配置完成。 4、启动Apache,访问:http://localhost/demodbf/extgrid-json.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值