2015-12-11 6 views
6

Ich habe 3 Eingabefelder in einem Formular und möchte den dritten Eingang erst aktivieren, wenn die ersten beiden Eingänge Werte haben.Wie verwenden Sie logische Operatoren in Bindungsformeln in ExtJS?

Dies scheint nicht zu funktionieren:

Ext.define('MyApp.view.myobj.MyPanel', { 
    extend:'Ext.Panel', 

    viewModel: {}, 

    items: [{ 
     xtype: 'form', 
     defaultType: 'textfield', 
     items: [ 
      {fieldLabel: 'Field 1', reference: 'field1', publishes: 'value'}, 
      {fieldLabel: 'Field 2', reference: 'field2', publishes: 'value'}, 
      { 
       fieldLabel: 'Field 3', 
       bind: { 
        disabled: '{!field1.value} || {!field2.value}' 
       } 
      },    
     ], 
    }], 
}); 

Fiddle

Antwort

6

Im View-Modell, eine Formel fügen Sie den Wert für {field1.value!} Zurück || {! Field1.value}

Gemäß der Geige:

viewModel: { 
    formulas: { 
     something: { 
      bind: { 
       x: '{!field1.value}', 
       y: '{!field2.value}' 
      }, 

      get: function (data) { 
       if (data.x || data.y) return true; 
       else return false; 
      } 
     } 
    } 
}, 

items: [{ 
    xtype: 'form', 
    defaultType: 'textfield', 
    bodyPadding: 10, 
    items: [ 
     {fieldLabel: 'Field 1', reference: 'field1', publishes: 'value'}, 
     {fieldLabel: 'Field 2', reference: 'field2', publishes: 'value'}, 
     { 
      fieldLabel: 'Field 3', 
      bind: { 
       disabled: "{something}" 
      } 
     },    
    ], 

}] 
+1

Nun würden Sie Javascript gerade dieses Problem zu beheben in '{! field1.value}' bevor sogar extjs erreicht wird. – serg

+0

Mein schlecht, du hast Recht. Hm. Eine weitere Möglichkeit besteht darin, den Feldern 1 und 2 einen Änderungslistener hinzuzufügen, beide auf Werte zu überprüfen und entsprechend zu aktivieren/deaktivieren. – Jaimee

+0

Ja, das ist, was ich gerade tue, ich frage mich, ob es eine einfache "bind" -Methode gibt. – serg

Verwandte Themen