2017-06-02 7 views
-1

私午前4チェックボックスがあります。は常に1つのチェックボックスにチェック=真

  { 
       xtype: 'panel', 
       layout: 'vbox', 
       border: 1, 
       defaults: { xtype: 'checkbox', anchor: '100%', margin: '2 0 2 2' }, 
       items: [ 
        { bind: { value: '{allObj.goods}' } }, 
        { bind: { value: '{allObj.names}' } }, 
        { bind: { value: '{allObj.fires}' } }, 
        { bind: { value: '{allObj.counts}' } } 
       ] 
      }, 

そして、私は次の希望:唯一のチェックボックスがあることとします。

がチェック=真

とその他:

チェック=偽

の場合、checked = falseの場合はこのチェックボックスを無効にします。

+0

確かに英語があなたのために困難です。問題は理解するのが難しいです。再調整してみてください。 –

+0

一度に1つだけチェックする場合は、チェックボックスの代わりにExt.form.field.Radioを使用する必要があると思います。 –

+0

この質問は不明です。そして私はそれが何を意味するのかネックスが欲しいですか? – UDID

答えて

1

チェックボックスが1つのみ選択されている場合は、選択解除を禁止する必要があります。あなたのコードにバインディングが含まれているので、バインディングでそれをやりたいここでは、次のとおりです。サイドノートで

items:[{ 
    xtype:'checkbox', 
    bind: { 
     value: '{allObj.goods}', 
     disabled:'{allObj.goods && !allObj.names && !allObj.fires && !allObj.counts}' 
    } 
},{ 
    xtype:'checkbox', 
    bind: { 
     value: '{allObj.names}', 
     disabled:'{!allObj.goods && allObj.names && !allObj.fires && !allObj.counts}' 
    } 
},{ 
    xtype:'checkbox', 
    bind: { 
     value: '{allObj.fires}', 
     disabled:'{!allObj.goods && !allObj.names && allObj.fires && !allObj.counts}' 
    } 
},{ 
    xtype:'checkbox', 
    bind: { 
     value: '{allObj.counts}', 
     disabled:'{!allObj.goods && !allObj.names && !allObj.fires && allObj.counts}' 
    } 
}] 

https://fiddle.sencha.com/#view/editor&fiddle/20rt

、あなたがdefaults.xtypeを使うべきではない、より良い再利用性のために。これにはdefaultTypeがあります。

間違っ

(作業時々はあるが):

defaults: { xtype: 'checkbox', margin: '2 0 2 2', ... 

正しい:

defaultType: 'checkbox', 
defaults: { 
    margin: '2 0 2 2', 
    ... 
2

あなたは私はあなたがExt.field.Radioを使用することができると思いますが、あなたは正確にしたい場合、あなたはそれのような何かを行うことができExt.field.Checkbox一度に一つだけのチェックボックスをチェックすることができるようにしたい場合:

 listeners: { 
      change: function (checkbox, value) { 
       if (!value) 
        return; 

       Ext.each(
        checkbox.up('panel').query('checkbox[checked=true]:not([name=' + checkbox.name + '])'), 
        function (checkbox) { 
         checkbox.uncheck(); 
        } 
       ); 
      } 
     } 

はこれをチェックsimple fiddle

更新:2回目の質問を読み終えたら、それをチェックするときに他のチェックボックスをすべて無効にしたいと思うかもしれません。もしそうなら、あなたはそれのようなことをすることができます:

  listeners: { 
       change: function (checkbox, value) { 
        var panel = checkbox.up('panel'); 
        if (value) { 
         Ext.each(
          panel.query('checkbox:not([name=' + checkbox.name + '])'), 
          function (checkbox) { 
           checkbox.disable(); 
          } 
         ); 
        } else { 
         Ext.each(
          panel.query('checkbox[disabled=true]'), 
          function (checkbox) { 
           checkbox.enable(); 
          } 
         ); 
        } 
       } 
      } 

これをチェックしてくださいsimple fiddle

関連する問題