`
Liu_wh
  • 浏览: 18609 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Ext2的一些扩展

阅读更多
本文转贴

extjsHacker.js
=============

//Extjs 2.X
//为grid ColumnModel 的renderer增加gridView的引用
//
Ext.grid.GridView.prototype.doRender = function(cs, rs, ds, startRow, colCount, stripe){
        var ts = this.templates, ct = ts.cell, rt = ts.row, last = colCount-1;
        var tstyle = 'width:'+this.getTotalWidth()+';';
        // buffers
        var buf = [], cb, c, p = {}, rp = {tstyle: tstyle}, r;
        for(var j = 0, len = rs.length; j < len; j++){
            r = rs[j]; cb = [];
            var rowIndex = (j+startRow);
            for(var i = 0; i < colCount; i++){
                c = cs[i];
                p.id = c.id;
                p.css = i == 0 ? 'x-grid3-cell-first ' : (i == last ? 'x-grid3-cell-last ' : '');
                p.attr = p.cellAttr = "";
                p.value = c.renderer(r.data[c.name], p, r, rowIndex, i, ds,this);
                p.style = c.style;
                if(p.value == undefined || p.value === "") p.value = "&#160;";
                if(r.dirty && typeof r.modified[c.name] !== 'undefined'){
                    p.css += ' x-grid3-dirty-cell';
                }
                cb[cb.length] = ct.apply(p);
            }
            var alt = [];
            if(stripe && ((rowIndex+1) % 2 == 0)){
                alt[0] = "x-grid3-row-alt";
            }
            if(r.dirty){
                alt[1] = " x-grid3-dirty-row";
            }
            rp.cols = colCount;
            if(this.getRowClass){
                alt[2] = this.getRowClass(r, rowIndex, rp, ds);
            }
            rp.alt = alt.join(" ");
            rp.cells = cb.join("");
            buf[buf.length] =  rt.apply(rp);
        }
        return buf.join("");
    }

//extjs 2.x 
/**
 * 为combobox添加lookup
 * @param {} v
 * @param {} rec
 */
Ext.form.ComboBox.prototype.setValue = function(v,rec){
       var text = v;

        if(this.valueField){
            var r = this.findRecord(this.valueField, v);

            if(r){
                text = r.data[this.displayField];
            }else if(this.valueNotFoundText !== undefined){
                text = this.valueNotFoundText;
            }
        }
        //添加lookup
        if (rec && this.record && text) {  
              if(this.lookup){
                  for(var i = 0 ; i<this.lookup.length ; i++){
                      this.record.set(this.lookup[i][0],rec.get(this.lookup[i][1]));
                  }
              }
         }
         
        this.lastSelectionText = text;
        if(this.hiddenField){
            this.hiddenField.value = v;
        }
        Ext.form.ComboBox.superclass.setValue.call(this, text);
        this.value = v;
    };
    
//extjs 2.x
/**
 * 为gridEditor添加行数据引用
 * @param {} el
 * @param {} value
 */
Ext.grid.GridEditor.prototype.startEdit = function(el, value){  
         if(this.editing){  
             this.completeEdit();  
         }  
         this.boundEl = Ext.get(el);  
         var v = value !== undefined ? value : this.boundEl.dom.innerHTML;  
         if(!this.rendered){  
             this.render(this.parentEl || document.body);  
         }  
         if(this.fireEvent("beforestartedit", this, this.boundEl, v) === false){  
             return;  
         }  
         //alert(this.field);
         this.startValue = v;  
         this.field.record = this.record;//就加入这一行,让field中获得当前数据行  
         this.field.setValue(v);  
         this.doAutoSize();  
         this.el.alignTo(this.boundEl, this.alignment);  
         this.editing = true;  
         this.show();  
     } 
    
//extjs 2.x  Ext.lib.Ajax
/**
 * 添加同步ajax
 * @param {} method
 * @param {} uri
 * @param {} callback
 * @param {} postData
 * @return {}
 */     
Ext.lib.Ajax.syncRequest = function(method, uri, callback, postData) {
    
            var o = this.getConnectionObject();

            if (!o) {
                return null;
            }
            else {
                o.conn.open(method, uri, false);

                if (this.useDefaultXhrHeader) {
                    if (!this.defaultHeaders['X-Requested-With']) {
                        this.initHeader('X-Requested-With', this.defaultXhrHeader, true);
                    }
                }

                if(postData && this.useDefaultHeader && (!this.hasHeaders || !this.headers['Content-Type'])){
                    this.initHeader('Content-Type', this.defaultPostHeader);
                }

                 if (this.hasDefaultHeaders || this.hasHeaders) {
                    this.setHeader(o);
                }

                this.handleReadyState(o, callback);
                o.conn.send(postData || null);

                return o;
            }
        };
        
//extjs 2.x  Ext.lib.Ajax  
/**
 * 添加同步ajax
 * @param {} method
 * @param {} uri
 * @param {} cb
 * @param {} data
 * @param {} options
 * @return {}
 */        
Ext.lib.Ajax.request = function(method, uri, cb, data, options) {
            if(options){
                var hs = options.headers;
                if(hs){
                    for(var h in hs){
                        if(hs.hasOwnProperty(h)){
                            this.initHeader(h, hs[h], false);
                        }
                    }
                }
                if(options.xmlData){
                    if (!hs || !hs['Content-Type']){
                        this.initHeader('Content-Type', 'text/xml', false);
                    }
                    method = (method ? method : (options.method ? options.method : 'POST'));
                    data = options.xmlData;
                }else if(options.jsonData){
                    if (!hs || !hs['Content-Type']){
                        this.initHeader('Content-Type', 'application/json', false);
                    }
                    method = (method ? method : (options.method ? options.method : 'POST'));
                    data = typeof options.jsonData == 'object' ? Ext.encode(options.jsonData) : options.jsonData;
                }
            }
            if ("sync" in options) return this.syncRequest(method, uri, cb, data);
            return this.asyncRequest(method, uri, cb, data);
        };   

//extjs 2.x 自动重连
/**
 * Ext.Ajax.request({
   url: 'foo.jsp',
   timeout:2,
   
   //重连次数
   retryCount:3,
   
   //重连后要注意保存新的 newTransactionId
   retry:function(retryCount,newTransactionId){
       
       alert('failture remain retry count :' + retryCount+'\n'
       +'newTransactionId : '+newTransactionId.tId);
   },
   
   //最终的失败函数
   failure: function(responseObject){
      alert('failture finally :'+responseObject.statusText);
   },
   headers: {
       'my-header': 'foo'
   },
   params: { foo: 'bar' }
});
*/
(function(){
    //保存原来的调用代码
    var oldRequest=Ext.lib.Ajax.request;
    //新的增强代码
    Ext.lib.Ajax.request = function(method, uri, cb, data, options) {
        //没有配置就运行老代码
        if(!options.retryCount) 
            return oldRequest.call(Ext.lib.Ajax,method, uri, cb, data, options);
        
        //保存原来的失败处理函数
        var oldFailure=cb.failure;
        //添加了自动重连的新的处理函数
        cb.failure=function(responseObject){
            options.retryCount--;
            if(options.retryCount) {
                //注意:自动重连后tId 变化
                var newTransactionId = oldRequest.call(Ext.lib.Ajax,method, uri, cb,data, options);
                //调用重连回调函数
                if(options.retry) {
                    options.retry.apply(cb.scope||window, [options.retryCount,newTransactionId]);
                }
            }    
            //重连够了,调用真正的失败函数。
            else if(oldFailure){
                oldFailure.apply(cb.scope||window, [responseObject]);
            }
        }
        
        //增强配置,再运行老代码
        return oldRequest.call(Ext.lib.Ajax,method, uri, cb, data, options);
                
    }
    
})();        
        
//extjs 2.x
/**
 * 为form添加当前数据record
 * @param {} values
 * @return {}
 */
Ext.form.BasicForm.prototype.setValues = function(values){
        this.data = values; //添加数据引用,用于以后使用
        if(Ext.isArray(values)){ // array of objects
            for(var i = 0, len = values.length; i < len; i++){
                var v = values[i];
                var f = this.findField(v.id);
                if(f){
                    f.setValue(v.value);
                    if(this.trackResetOnLoad){
                        f.originalValue = f.getValue();
                    }
                }
            }
        }else{ // object hash
            var field, id;
            for(id in values){
                if(typeof values[id] != 'function' && (field = this.findField(id))){
                    field.setValue(values[id]);
                    if(this.trackResetOnLoad){
                        field.originalValue = field.getValue();
                    }
                }
            }
        }
        return this;
    }        
    
    
//Extjs 2.x 
Ext.FormPanel.prototype.initFields = function(){
        var f = this.form;
        var formPanel = this;
        var fn = function(c){
            if(c.isFormField){
                c.form = formPanel; //为录入控件添加form的引用
                f.add(c);
            }else if(c.doLayout && c != formPanel){
                Ext.applyIf(c, {
                    labelAlign: c.ownerCt.labelAlign,
                    labelWidth: c.ownerCt.labelWidth,
                    itemCls: c.ownerCt.itemCls
                });
                if(c.items){
                    c.items.each(fn);
                }
            }
        }
        this.items.each(fn);
    }

//Extjs 2.x
Ext.FormPanel.prototype.beforeDestroy = function(){
        var fn=function(c){
            if (c.isFormField) {
                if(c.form) {
                    c.form=null;
                    delete c.form;
                }
            }
            if(c.items){
                c.items.each(fn);
            }
        };
        this.items.each(fn);
        Ext.FormPanel.superclass.beforeDestroy.call(this);
        this.stopMonitoring();
        Ext.destroy(this.form);
    }    
    
Ext.override(Ext.form.BasicForm, {
  setReadOnly: function(bReadOnly){
    this.items.each(function(f)
    {
      if (f.isFormField)
      {
        f.getEl().dom.readOnly = bReadOnly;                
        // Remove click event handlers
        if (f instanceof Ext.form.TriggerField)        
        {
          if (bReadOnly)
            f.trigger.un('click', f.onTriggerClick, f)
          else
            f.trigger.on('click', f.onTriggerClick, f, {preventDefault:true});
          
          if (f instanceof Ext.form.ComboBox) //Alternatively, to check if combobox use: if (f.setEditable)...
          {
              if(f.view){
                if (bReadOnly){
                    f.view.un('click', f.onViewClick, f)
                }
                else{
                    f.view.on('click', f.onViewClick, f);
                }
              }
          }
        }
      }
    });    
  }
}); 
分享到:
评论

相关推荐

    ext2文件扩展属性讲解[借鉴].pdf

    EXT2文件系统是Linux操作系统中广泛使用的文件系统之一,它具有丰富的安全特性,其中包括扩展属性(attribute)。这些属性为系统管理员提供了额外的控制手段,以增强文件和目录的安全性及完整性。本文主要介绍EXT2...

    EXT 自定义控件扩展

    以下是一些关于EXT自定义控件扩展的关键知识点: 1. **类继承**:EXT支持基于面向对象的编程,自定义控件通常通过继承EXT现有的基础控件类来实现。例如,如果你想要创建一个自定义的按钮,你可以从`Ext.button....

    Windows读取Ext4分区的工具 Ext2Read

    总结来说,Ext2Read是一个实用的工具,帮助Windows用户方便地访问和提取Linux EXT分区的数据,扩展了跨平台操作的可能性。不过,在使用过程中,用户应当遵循相应的安全规范,避免对数据造成不必要的损害。

    Ext下拉列表扩展lovcombo

    2. **扩展 ComboBox 类**:lovcombo 需要继承EXTJS的ComboBox类,通过`Ext.extend`方法实现。 3. **配置模板**:lovcombo 的下拉列表需要一个新的模板来显示复选框。我们可以使用`tpl`配置项来定义一个包含复选框的...

    ext2文件系统扩展属性

    详细介绍了ext2文件系统在内核中的布局,以及ext2的基本数据结构和功能介绍,同时详细的讲解了ext2文件系统中的扩展属性,从基本数据结构入手,剖析了关于扩展属性的详细操作流程。

    ext grid 动态扩展

    在EXT JS中,`Ext Grid` 是一个强大...通过以上步骤,我们可以实现 `Ext Grid` 的动态扩展功能,使得在运行时可以根据需求灵活调整列的数量和内容,提高了用户体验。这在处理复杂且不断变化的数据展示场景时尤其有用。

    ext2内核源码

    这些代码涵盖了文件系统的创建、挂载、卸载、读写等基本功能,还包括了一些高级特性,如日志记录(journaling)的扩展EXT3和EXT4。 **学习EXT2源码的意义** 研究EXT2的源码能够帮助我们深入理解文件系统的底层工作...

    ext 下拉树 ext2

    标题中的"ext 下拉树 ext2"指的是使用Ext JS库构建的一个特定版本的下拉树组件,其中"ext2"可能表示使用的是Ext JS的2.x版本。Ext JS是一个强大的JavaScript框架,主要用于构建富客户端Web应用程序,它提供了一系列...

    EXT2API documentation

    2. **组描述符表(Group Descriptor Table)**:EXT2将文件系统划分为多个组,每个组有自己的超级块副本、i节点表和块位图,便于管理和扩展。 3. **i节点(Inode)**:每个文件和目录在EXT2中都有一个i节点,包含了...

    ext2explore绿色版

    EXT4是Linux内核的第四代扩展文件系统,它在性能、可靠性和可扩展性方面有显著提升,尤其适合大型数据存储。 在Windows系统中,由于默认不支持EXT4格式,因此无法直接读取或挂载EXT4格式的硬盘。这时,EXT2explore...

    Ext继承和扩展

    **二、Ext扩展** ExtJS中的"扩展"通常指的是`Ext.override()`方法,它用于给现有的类添加新的方法或覆盖原有的方法,而无需创建新的类。这种机制在不改变原有类结构的情况下,提供了增强或定制已有功能的能力。 ...

    Ext组件扩展包 - DateTime

    Ext组件扩展包 - DateTime 是一个专门用于增强JavaScript应用程序中日期和时间处理能力的工具集。在Web开发中,尤其在创建交互式用户界面时,日期和时间选择器是不可或缺的一部分。此扩展包提供了美观且功能丰富的...

    Paragon Ext2fs Anywhere2.5汉化版

    Ext2Fsd默认也不会将写操作打开,需要修改注册表文件Ext2fsd.reg,将WritingSupport改为00000001,另外要修改配置文件ext2fsd.inf,将里面WritingSupport改为1。重新导入注册表并启动服务,写操作就可以顺利完成了。...

    linux_ext2,3文件系统详解

    EXT2是在1992年由Rémy Card开发的,主要为了解决当时Minix文件系统的一些限制。EXT2的主要特点包括: 1. **块组结构**:EXT2将硬盘划分为多个块组,每个组包含一定数量的数据块、索引节点块、超级块以及块位图和...

    linux ext2 文件系统模拟 c语言实现

    Linux的EXT2(第二扩展文件系统)是早期广泛使用的文件系统之一,特别是在嵌入式系统和Linux服务器上。EXT2的C语言实现是一项技术性极强的任务,涉及到对操作系统底层机制的理解,包括文件系统的结构、inode、超级块...

    Ext2的示例,包含了ext2大部分的方法示例

    - **访问控制列表(Access Control Lists, ACLs)**:EXT2原生不支持ACL,但可以通过第三方扩展实现。 5. **日志模式** - **非日志化(Non-journaling)**:EXT2最初设计时不包含日志功能,因此对文件系统的恢复...

    ext2-api.rar

    EXT2虽然在现代Linux发行版中逐渐被EXT3、EXT4和其它文件系统取代,但它仍然在一些旧系统或嵌入式设备中使用,了解其API对于系统管理员和开发者来说仍有一定的价值。通过这个CHM文件,用户可以深入学习EXT2的内部...

    fuse-ext2-0.0.7

    综上所述,fuse-ext2-0.0.7是Linux系统中一个重要的文件系统桥接工具,它扩展了Linux对EXT2和NTFS的支持,使得用户可以在Linux环境中无缝地挂载和管理这些非原生文件系统。通过FUSE的用户空间文件系统实现,它降低了...

    Openlayers扩展插件ol-ext ,2022年4月版本v3.2.23

    1. **图形和符号**:ol-ext扩展了OpenLayers的基本图标和标记功能,引入了更多的图形元素,如箭头、圆形、正方形、星形等。这些图形可以用于表示特定的地理信息或增强地图的可视化效果。此外,还支持自定义SVG图形,...

    codePress Ext 扩展代码实现

    总结来说,codePress Ext扩展的实现涉及到以下几个关键知识点: 1. EXTJS框架:理解EXTJS的组件化架构,掌握如何创建和配置EXT组件。 2. codePress编辑器:熟悉codePress的API,学习如何实现代码高亮、编辑功能和...

Global site tag (gtag.js) - Google Analytics