2012-11-07 103 views
1

我想擴展顏色選擇器小部件,並添加一些新的功能,它目前缺少它。目前ExtJS顏色選擇器只允許我們從預定義顏色中進行選擇。我要添加如添加<canvas>元件,其將呈現顏色光譜和用戶將能夠選擇自定義顏色,能力在RGB或十六進制格式提供顏色值等特徵如何在ExtJS 4中創建自定義小部件?

我試圖從Ext.Component類直接延伸但那麼我沒有得到由ExtJS顏色選擇器提供的默認功能。

那麼任何人都可以告訴我如何擴展ExtJS的當前小部件並添加新的功能?

在此先感謝!

+0

你試過擴展'Ext.picker.Color'嗎? – Damask

+0

我試圖擴展'Ext.picker.Color',但不知道如何將文本框放在默認顏色下面,以便用戶能夠輸入RGB和十六進制值。 – Shekhar

+0

您需要重寫** render **方法:http://docs.sencha.com/ext-js/4-1/#!/api/Ext.picker.Color-method-render – Damask

回答

2

最簡單的方法是把它全部打包到一個擴展名爲fieldcontainer的字段以及字段mixin中。這裏有一個例子(簡單的輸入,完全沒有經過測試!)。我認爲只要使用本地組件和本機佈局,就不需要重寫渲染。

Ext.define('Ext.ux.form.field.AdvancedPicker', { 
    extend: 'Ext.form.FieldContainer', 
    mixins: { 
     field: 'Ext.form.field.Field' 
    }, 
    alias: 'widget.advancedpicker', 
    layout: 'hbox', 
    width: 200, 
    height: 22, 
    combineErrors: true, 
    msgTarget: 'side', 

    pickerCfg: null, 
    textfieldCfg: null, 

    initComponent: function() { 
     var me = this; 
     if (!me.pickerCfg) me.pickerCfg = {}; 
     if (!me.textfieldCfg) me.textfieldCfg = {}; 
     me.buildField(); 
     me.callParent(); 
     me.pickerField = me.down('picker') 
     me.textField = me.down('textfield') 

     me.initField(); 
    }, 

    //@private 
    buildField: function() { 
     var me = this; 
     me.items = [ 
     Ext.apply({ 
      xtype: 'picker', 
      submitValue: false, // this one shouldn't get submitted 
      width: 100, 
      flex: 2 
     }, me.pickerCfg), 
     Ext.apply({ 
      xtype: 'textfield', 
      submitValue: false, // this one shouldn't get submitted 
      width: 80, 
      flex: 1 
     }, me.textfieldCfg)] 
    }, 

    getValue: function() { 
     var me = this, 
      value; 
     // getting the value form the nested fields 
     return value; 
    }, 

    setValue: function (value) { 
     var me = this; 
     // setting the values to the nested fields 
    }, 

    getSubmitData: function() { 
     var me = this, 
      data = null; 
     // getting the value form the nested field which should get submit in formatted manner (if needed. otherwise just call getValue()) 
     return data; 
    } 
}); 
+0

感謝您的回答。我還有一個問題。在我的自定義顏色選擇器中,我必須添加一些html元素,例如,其中我將渲染色譜圖,以便用戶可以選擇自定義顏色。那麼是否有可能使用上面的代碼添加這種自定義html元素? – Shekhar

+0

@Shekhar那麼你需要編寫你自己的組件。我懷疑現有的colorpicker會幫助你。我的錯誤是我沒有完全閱讀你的帖子,對此抱歉。無論如何,我上面的例子可能是一個很好的開始。只是選擇器將有你自己的... – sra

+0

@Shekhar也許這個選擇器可以幫助你寫你自己的一個 https://github.com/osnoek/Ext.ux.ColorPicker/tree/master/Ext.ux.ColorPicker – sra

相關問題