2013-07-04 3 views
0

나는 combobox를 만들고 저장하기 위해 배열을 첨부했습니다. 내가 원했던 것은 목록에서 사용할 수 있거나 사용자 정의 텍스트를 입력 할 수 있다는 것입니다. forceSelection = false를 통해이 작업을 수행 할 수 있었는지 검색했습니다. 그 문서를 읽으면 forceSelection이 기본적으로 false이고 Sencha 설계자가 명시 적으로 구성을 설정할 수 없으므로 찾았습니다. 아래는 내가 한 설정입니다. 하지만 탭을 누르거나 콤보 상자에 입력 한 텍스트를 입력하자마자 더 이상 존재하지 않습니다.Extjs Combobox : combobox에서 forceSelection false가 작동하지 않습니다.

{ 
xtype: 'fieldcontainer',          
id: 'internetmessager', 
autoDestroy: false, 
layout: { 
    align: 'stretch', 
    type: 'hbox' 
}, 
items: [ 
    { 
     xtype: 'combobox', 
     flex: 1, 
     margin: '0 10 0 0', 
     name: 'label', 
     autoSelect: false, 
     queryMode: 'local', 
     store: [ 
      'Home', 
      'Work', 
      'Personal' 
     ], 
     typeAhead: true 
    }, 
    { 
     xtype: 'textfield', 
     flex: 2, 
     name: 'value', 
     emptyText: 'IM' 
    } 
] 
} 

감사합니다, 알리 압바스

답변

0

나는 그것이 'forceSelection'의 기본 값이 true 인 것을, 엽차 설계자 2.2.2의 버그라고 생각하지만 워드 프로세서는 false 말한다 (IMHO)를 사용하는 것이 좋을 것이다 항목 ID. 그리고 건축가는 'forceSelection'속성이 false라고 가정하여 'forceSelection'을 false로 만들 수있는 방법을 제공하지 않습니다. 그게 내가 틀렸다면 내가 맞았던 것. 내가 한 해결 방법은 arhitect 구성 패널에서 '프로세스 구성'을 사용했습니다. 이는이 processLabel 기능

{ 
    xtype: 'fieldcontainer', 
    id: 'internetmessager', 
    autoDestroy: false, 
    layout: { 
     align: 'stretch', 
     type: 'hbox' 
    }, 
    items: [ 
     me.processLabel({ 
      xtype: 'combobox', 
      flex: 1, 
      margin: '0 10 0 0', 
      name: 'label', 
      store: [ 
       'Home', 
       'Work', 
       'Personal' 
      ], 
      valueField: 'text' 
     }), 
     { 
      xtype: 'textfield', 
      flex: 2, 
      name: 'value', 
      emptyText: 'IM' 
     } 
    ] 
} 

그리고 에서

processLabel 내가 명시 적으로 forceSelection 속성이 false 만든 기능을 추가 할 수 있습니다.

processLabel: function(config) {   
    config.forceSelection = false; 
    return config; 
} 
0

[편집] 사람 아 ... 미안 해요 ... 내가 againg 질문을 다시 읽어 후, 나는 당신이 센차 아키텍트 을 [사용하고 실현 /편집]

나는 당신을 정확하게 이해한다면 ... 내가 한 행동 : 콤보 상자에 쓰거나 그 가게에서 가치를 선택하십시오. combobox를 (blur-listener) 상태로두면 실제 값이 textfield로 설정됩니다. 는 BTW : 이제

items: [ 
{ 
    xtype: 'fieldcontainer', 
    id: 'internetmessager', 
    autoDestroy: false, 
    layout: { 
     align: 'stretch', 
     type: 'hbox' 
    }, 
    items: [ 
     { 
      xtype: 'combobox', 
      flex: 1, 
      margin: '0 10 0 0', 
      name: 'label', 
      autoSelect: false, 
      queryMode: 'local', 
      store: [ 
       'Home', 
       'Work', 
       'Personal' 
      ], 
      typeAhead: true, 
      listeners: { 
       blur: function (combo) { 
        Ext.ComponentQuery.query('[name=value]')[0].setValue(combo.getValue()); 
       } 
      } 
     }, 
     { 
      xtype: 'textfield', 
      flex: 2, 
      name: 'value', 
      emptyText: 'IM' 
     } 
    ] 
} 
+0

아니요. 나는 그 일을 올바르게 설명하지 않았다고 생각하지 않습니다. 내가 실제로 원했던 것은 사용자가 Store Array에없는 사용자 정의 레이블을 입력 할 수 있다는 것입니다. 사용자는 콤보 상자에 'Office'를 입력 할 수 있으며이 값은 사용자 탭 다음의 다른 필드에도 적용될 수 있습니다. 실제로 무슨 일이 일어나는지는 콤보 상자에 'Office'라고 입력하고 콤보 박스의 탭 값을 누르면 비어있게됩니다. –