zoukankan      html  css  js  c++  java
  • EXTJS4 学习日志2

    1.STORE和MODEL的封装

    例外处理,READER的一些通用熟悉要进行封装。EXTJS3的时候这些东西都写到BASESTORE中即可,现在需要写到STORE和MODEL中。

    安计划是将proxy封装到BASEMODEL中,结果发现BASEMODEL使用constructor方法无法解决继承的问题。即:由于STORE中引用MODEL不是用CREATE的方法,而是直接指定类,所以创建的时候,BASEMODEL并不执行constructor中的方法。所以PROXY的定义只能房到basestore中。

    -------------

    2.关于例外的处理。

    在store, model中在与服务器出现错误后,有会有提示,但是不能得到详细信息。

    store的load事件增加了successful参数,可以知道调用是否成功,但是如果失败,没办法得到失败信息。

    文档中load事件的参数如下:

    load( Ext.data.store this, Array records, Boolean successful, Ext.data.Operation operation, Object options ),但是查看其代码发现:

    在store的onProxyLoad方法中代码如下:

    me.fireEvent('load', me, records, successful);

    也就是说,load事件并无法得到operation和options 的参数。

    即使得到operation,operation也只能通过getError( )这个方法获得错误信息,这个信息不够详细,只有status和code.

    所以要想得到详细的服务器错误信息,只能到proxy中。

    ajax的proxy的事件exception有如下参数:

    exception( Ext.data.proxy.Proxy this, Object response, Ext.data.Operation operation, Object options )

    这里的response可以得到所有返回结果。

    --------------------------

    以下是封装后的代码:

    Ext.define('Hljs.component.BaseStore', {
        extend: 'Ext.data.Store',
        //hl add 20100421
        showWaitWindow: true,
        constructor: function(config){
            config = config || {};
            Ext.apply(config, {
                proxy: {
                type: 'ajax',
                actionMethods: { read: 'POST'},
                api:{
                    read: _path + '/' + config.action + config.isSpCall?'?act=spCall':'?act=query',
                    read: _path + '/' + config.action + '?act=query',
                    create : _path + '/' + config.action + '?act=insert',
                    update: _path + '/' + config.action + '?act=update',
                    destroy: _path + '/' + config.action + '?act=delete'
                },
                reader: {
                    type: 'json',
                    root: 'root',
                    totalProperty: 'totalProperty',
                    successProperty: 'success'
                },
                writer:{
                    encode: true,
                    root: 'root'
                },
                listeners:{
                    exception: function(p, res, oper, opt){
                    alert('a');
                }
                }
            }           
            });
            this.callParent([config]);
        }    ,
        onProxyLoad: function(operation) {
            if(!operation.wasSuccessful()){
                var error = operation.getError();
            }
            this.callParent([operation]);
        }

    });

    Ext.define('Hljs.component.BaseModel', {
        extend: 'Ext.data.Model'
    });

    -----------------------------------------------

    3.关于命名空间

    原先的Hljs.util.PageHelper是一个单例,取消了Ext.namespace,如果还是定义Hljs.util.PageHelper = new (function(){。。。})就会报错,解决的办法是:

    把原先的定义:Ext.namespace("Hljs.util");

    修改成:

    Ext.define('Hljs.util', {
    });

  • 相关阅读:
    C#中如何调用Delphi写的Dll
    正则表达式与抓取是网页图片
    Jmeter使用基础笔记认识Jmeter
    mac下Redis安装和使用
    Jmeter逻辑控制器ForEach Controller
    Jmeter BeanShell PreProcessor使用笔记
    Jmeter使用笔记之断言
    Mac在python3环境下安装virtualwrapper遇到的问题
    Jmeter使用基础笔记写一个http请求
    使用SQLSERVER的扩展存储过程实现远程备份与恢复
  • 原文地址:https://www.cnblogs.com/barryhong/p/2164036.html
Copyright © 2011-2022 走看看