2017-10-12 2 views
0

Ich habe eine Platte mit einigen textField und fieldcontainer wie folgt aus:ExtJS: Textfeld allowblank mit Bedingungen

Ext.apply(this, { 

       items: [{ 
        padding: '0 10 5 10', 
        xtype: 'textfield', 
        name: 'data', 
        id:'data', 
        alType: 'data', 
        labelWidth: 130, 
        fieldLabel: i18n.get('label.data'), 
        allowBlank: false, 
        enforceMaxLength: true, 
        maxLength: 8, 
        minLength: 1, 
        allowDecimals : false, 
        allowExponential : false, 
        invalidText: i18n.get('error.bad.data'), 
        maskRe: /[0-9]/ 
       }, { 
        xtype: 'fieldcontainer', 
        layout: 'hbox', 
        defaultType: 'textfield', 
        items: [{ 
         padding: '0 10 5 10', 
         width:285, 
         xtype: 'datefield', 
         name: 'date', 
         id:'date', 
         alType: 'date', 
         format : 'd/m/Y', 
         labelWidth: 130, 
         fieldLabel: i18n.get('label.date'), 
         allowBlank: false, 
        },{ 
         xtype: 'timefield', 
         padding: '0 10 5 15', 
         width:230, 
         name: 'hour', 
         id:'hour', 
         labelWidth: 80, 
         fieldLabel: i18n.get('label.hour'), 
         minValue: '00:00', 
         maxValue: '23:00', 
         format: 'H:i', 
         increment: 60, 
         anchor: '100%', 
         allowBlank: false, 
        }] 
       }] 
     }); 
     this.callParent(arguments); 

Und ich würde eine Bedingung für „allowBlank“ gerne hinzufügen:

-durch alle allowBlank Standard sind false

-wenn es ein data => allowBlank für Datum und Stunde ist true

-wenn es ein Datum gibt und ein hour => allowBlank für Daten ist true

Wie kann ich das bitte tun?

Sorry für mein schlechtes Englisch.

danke

+1

etwas Geige Geben Sie für Ihren Code – Tejas

+0

Es tut mir leid, ich weiß nicht warum, aber das „Hallo“ fehlt .. – Bartac

+0

Sie sollten einen benutzerdefinierten Validator schreiben. –

Antwort

0

Sie können es wie unten tun: -

field.allowBlank = YOUR_DATA.allowBlank; // data => allowBlank 
field.validateValue(field.getValue()); 

Hope this Hilfe.

0

Sie können dies erreichen, indem Sie das ViewModel verwenden.

Wenn Sie einen Standard MVC (Model View Controller) verwenden, gehe ich davon aus, dass Sie bereits wissen, wie man einen Controller verwendet.

In Ihrem Controller, der Moment, mit denen Sie Ihre Daten ein:

Controller-Code-Snippet:

me.getViewModel().set('isThereData', data) 
me.getViewModel().set('isThereDate', dateAndHour) 
  • Anmerkung: Es ist nicht notwendig, diese Variablen auf eigenes Ansichtsmodell zu initiieren.

Ihrer Ansicht nach Code-Snippet:

xtype : 'textfield', 
fieldLabel : 'data', 
bind : { 
    allowBlank : '{isThereDate}' 
} 

xtype : 'textfield', 
fieldLabel : 'Date and Hour', 
bind : { 
    allowBlank : '{isThereData}' 
} 
  • Thru Bindung, die Werte, die Sie auf Ihrem Ansichtsmodell gesetzt werden mit den Werten auf Ihrer Ansicht synchronisiert werden.
  • ExtJS automatisch übersetzt '{isThereData}' true, wenn es nicht leer ist
0

seine ganz einfach:

erhalten Daten in Config oder init-Methode:

allowBlank:(data.rec.hour)?'true':'false'; 

Das wird sicherlich funktionieren. , wenn Sie es in Zuhörer wie Wechsel verwenden wollen oder dann konzentrieren,

onChangeCheckbox:function(cmp, newValue, oldvalue){ //it is recomended to use allowBlank in listners instead. 
      var me=this, 
      form=cmp.up('form'), 
      field=form.down('#foldername'), 
      field.allowBlank=!newValue; 
       //(please set condition accordingly Above.) 
     }, 
0

Versuchen Sie, diese

var yourField = Ext.getCmp('comboBoxID'); 
if(your_condition == true){ 
    Ext.apply(yourField,{allowBlank:true}); 
}else { 
    Ext.apply(yourField,{allowBlank:false}); 
} 
0

Sie eine Funktion wie unten verwenden können.

function setAllowBlank(field, allowBlank) { 
    if (field.allowBlank != allowBlank) { 
    Ext.apply(field, allowBlank); 
    } 
} 

Verbrauch:

var field = Ext.getCmp('date'); 
setAllowBlank(field, true);