2012-03-20 61 views
0

我在ExtJS 3.3.1中註冊xtypes時遇到了一些麻煩。ExtJS xtype註冊

我想要一個帶有兩個字符串字段的複合字段,但只顯示一個字段。

一些幫助會很好,因爲我一直在努力奮鬥它一段時間,我不知道什麼是錯的。 這是我的代碼:

Ext.myApp.StringDouble = Ext.extend(Ext.form.CompositeField, { 
    separator: '-', 
    unitOptions: {}, 
    values: ['first', 'second'], 
    bothRequired: false, 

    init: function() { 
     this.items = []; 
     var unitConf = { 
     }; 

     Ext.apply(unitConf, this.unitOptions); 
     this.items.push(new Ext.form.TextField(Ext.apply({ 
      name: this.values[0] + '.' + this.name,   
      fieldLabel: this.fieldLabel + ' ' + this.values[0], 
       value: this.value && this.value[this.values[0]] 
     }, unitConf))); 

     this.items.push(new Ext.form.DisplayField({ 
      value: this.separator 
     })); 

     this.items.push(new Ext.form.TextField(Ext.apply({ 
      name: this.values[1] + '.' + this.name,   
      fieldLabel: this.fieldLabel + ' ' + this.values[1], 
      value: this.value && this.value[this.values[1]] 
    }, unitConf))); 

}, 

initComponent : function() { 
    this.init(); 
    Ext.form.TextField.superclass.init.Component.call(this); 
} 

}); 

Ext.reg('stringdouble', Ext.myApp.StringDouble); 

謝謝。

回答

0

首先,我不明白爲什麼你需要創建自己的組件時,通過配置來compositefield可以達到相同的行爲,這樣

{ 
    xtype: 'compositefield', 
    labelWidth: 120 
    items: [ 
     { 
      xtype  : 'textfield', 
      fieldLabel: 'Title', 
      width  : 20 
     }, 
     { 
      xtype  : 'textfield', 
      fieldLabel: 'First', 
      flex  : 1 
     } 
    ] 
} 

,也有調用父類時錯字initComponent方法

initComponent : function() { 
    this.init(); 
    Ext.form.TextField.superclass.initComponent.call(this); 
} 
+0

這些組件用作可以通過定義(更改標籤,單位,分隔符...)修改的模板。它們用於諸如庫存保存之類的項目,其中很多項目具有相似的參數。 – Zhack 2012-03-20 20:49:38