2010-06-07 43 views
2

当我将Ext.Resizable的参数wrap: true, handles: 's'应用于Ext.form.TextAreawidth: 100%时,文本区域会丢失其宽度。更具体地说,宽度被重置为某物。像像素的默认宽度。干净地制作Ext.Resizable是否可以完全不触摸宽度并仅对元素的高度进行操作?我检查了不接触宽度原则上可以正常工作,方法是在文本区域中替换(在FireBug中)显式宽度,并用'宽度:100%'将其包装为div是否可以在'width:100%'元素上使用Ext.Resizable?

我正在尝试实现类似于SO的问题/答案文本区域的效果,该区域可以调整高度。

+0

@artlung:我最终使用的hackish围绕这个工作“Ext.Resizable”的子类。如果你有兴趣,我可以检索它并粘贴在这里。 – doublep 2010-06-24 21:43:34

回答

1

试试这个:

Ext.onReady(function(){ 

    var el = Ext.getBody().createChild({ 
     tag: 'div', 
     style: 'width: 600px;' 
    }); 

    var area = new Ext.form.TextArea({ 
     renderTo: el, 
     style: 'width: 100%' 
    }); 

    new Ext.Resizable(area.el, { 
     wrap: true, 
     handles: 's', 
     height: area.getHeight(), 

    }); 
}); 
1

这是我最终使用的hackish子类。

ExtOverrideUtils = { 
    setSizeIgnoreWidth: function (width, height, animate) 
    { 
     this.setHeight ((typeof width == 'object' ? width.height : height), animate); 
    }, 

    intercept: function (func, overrides) 
    { 
     return function() 
      { 
       var value = func.apply (this, arguments); 

       if (value) { 
        for (var name in overrides) 
         value[name] = overrides[name]; 
       } 

       return value; 
      }; 
    } 
} 

NoWidthResizable = Ext.extend (Ext.Resizable, 
    { 
     constructor: function (el, config) 
     { 
      el = Ext.get (el); 

      el.setSize = ExtOverrideUtils.setSizeIgnoreWidth; 
      el.wrap = ExtOverrideUtils.intercept (el.wrap, { setSize: ExtOverrideUtils.setSizeIgnoreWidth }); 

      NoWidthResizable.superclass.constructor.call (this, el, config); 
     } 
    }); 

Ext.form.TextArea自定义子类的使用(虽然我猜它可以用来就像正常Ext.Resizable,对任意一个元素):

this._resizer = new NoWidthResizable (this.el, 
             { wrap: true, 
             handles: 's', 
             minHeight: 30, 
             pinned: true, 
             dynamic: true }); 
相关问题