2012-10-28 84 views
0

我使用ExtJs4.1,我需要创建一个新的textField,在右侧有一个自定义按钮。Extjs撰写组件

我第一次尝试是创建一个文本框的容器和里面的按钮:

{ 
    xtype: 'container', 
    layout: 'hbox', 
    items:[ 
    {xtype:'textField', flex:1}, 
    {xtype:'button', width:17} 
    ] 
} 

事实上,我会在很多地方使用这个组件,所以我需要创建一个自定义的控制。

我该怎么做,记住textField是最重要的控件。

+0

你是什么意思”cus汤姆控制“?你想把这个容器定义为单独的组件,即。 'Ext.container.Container'? –

回答

0

您需要定义它。你可以给它一个xtype别名来轻松地引用它。确保在尝试调用它之前加载它(通过使用'require')。

Ext.define('My.namespace.Component', { 
    extend: 'Ext.container.Container', //extend Container 
    alias: 'widget.mycomponent',  //this is the xtype (minus 'widget.') 

    layout:{ 
    type:'hbox' 
    }, 

    initComponent:function(){ 

    Ext.applyIf(this, { 
      items: [ 
       { 
        xtype: 'textfield', 
        fieldLabel: 'Label', 
        flex: 1 
       }, 
       { 
        xtype: 'button', 
        text: 'MyButton', 
        flex: 1 
       } 
      ] 
    }); 

    this.callParent(arguments); //everything breaks if you forget this 
    } 
}); 
在视图中或其它部件

,使用需要来加载上述组分:

... 
requires:[ 
    'My.namespace.Component' 
] 
... 

使用方法如下:

{ 
    xtype:'mycomponent', 
    width:666 
} 
+0

但在这种情况下,我的基类是“容器”。有一种方法可以成为“textField”吗? – Beetlejuice

+0

为什么它必须是文本字段而不是容器? –

+0

将其作为插件编写会更好。 – Christoph

0

制作一个资源,我发现了“触发现场“解决方案:

Ext.define('App.controls.CoTextField',{ 
    extend: 'Ext.form.field.Trigger', 
    alias: 'widget.cotextfield', 
    triggerCls: 'x-form-trigger', 
    trigger2Cls: 'x-form-clear-trigger', 
    onTriggerClick: function() { 
     alert('Down button'); 
    }, 
    onTrigger2Click: function() { 
     alert('Clear button'); 
    } 

});