2015-01-05 6 views
0

Sencha Architect 사용 작업 열이있는 표를 시도하고 있습니다. 열은 눈금 행의 값에 따라 숨기거나 표시되는 두 개의 가능한 아이콘을가집니다. 이것은 잘 문서화 된 유스 케이스이며 예제 코드를 가능한 한 자세히 따라 가려고했지만 단순히 작동시키지 못한다.ExtJS getClass() 동적으로 아이콘 숨기기/표시

  columns: [ 
      { 
       xtype: 'actioncolumn', 
       width: 50, 
       dataIndex: 'IsFilter', 
       items: [ 
        { 
         getClass: function(v, metadata, r, rowIndex, colIndex, store) { 
          var isFilter = r.get('IsFilter'); 
          if (!isFilter) { 
           return "x-hide-display"; 
          } else { 
           console.log(r.get('Title') + ' sort'); 
           return "x-grid-center-icon"; 
          } 
         }, 
         icon: 'resources/Images/png/sort35.png' 
        }, 
        { 
         getClass: function(v, metadata, r, rowIndex, colIndex, store) { 
          if (v) { 
           return "x-hide-display"; 
          } else { 
           console.log(r.get('Title') + ' filter'); 
           return "x-grid-center-icon"; 
          } 
         }, 
         icon: 'resources/Images/png/funnel6.png' 
        } 
       ] 
      } 

올바른 콘솔 메시지가 표시되면서 논리가 작동한다는 것을 알고 있습니다. 원하는 결과는 하나의 아이콘 또는 다른 아이콘을 표시하는 것입니다. 대신 항상 두 아이콘을 표시합니다. 그래서 내가 뭘 잘못하고 있니?

+0

안녕하세요, x-hide-display가 작업 항목 클래스 인 것으로 표시되지 않습니다. CSS에 x-hide-display 코드를 수동으로 추가 했습니까? 그렇다면 여기에서 코드를 공유하십시오. 그렇지 않다면 CSS에 .x-hide-display {display : none;}를 추가하십시오. –

답변

1

문제는 논리를 단순화 할 때 논리적이어야하며 참과 거짓 값을 바꿀 때 문제가됩니다. r.get('IsFilter');if (v) { 실제로 당신이 바로 그 시간에 기대 것이 무엇 반환하는 경우

columns: [ 
     { 
      xtype: 'actioncolumn', 
      width: 50, 
      dataIndex: 'IsFilter', 
      items: [ 
       { 
        getClass: function(v, metadata, r, rowIndex, colIndex, store) { 
         if (true) { 
          return "x-hide-display"; 
         } else { 
          console.log(r.get('Title') + ' sort'); 
          return "x-grid-center-icon"; 
         } 
        }, 
        icon: '/js/ext-3.4.0/resources/images/access/menu/unchecked.gif' 
       }, 
       { 
        getClass: function(v, metadata, r, rowIndex, colIndex, store) { 
         if (false) { 
          return "x-hide-display"; 
         } else { 
          console.log(r.get('Title') + ' filter'); 
          return "x-grid-center-icon"; 
         } 
        }, 
        icon: '/js/ext-3.4.0/resources/images/access/menu/checked.gif' 
       } 
      ] 
     }, 

확인 확인합니다.

+0

답변 해 주셔서 감사합니다. 실망스럽게도, 마찬가지로 논리를 단순화 할 때 나는 여전히 두 가지 아이콘을 볼 수 있습니다. 나는 논리가 괜찮다고 확신하고 전달되는 값이 맞다. –

+0

CSS를 전혀 무시 했습니까? – Scriptable

+0

나는 showIconSort와 showIconFilter의 새로운 CSS 클래스를 추가하려고하고 있지만 아직 작동하지 않았다. 재정의 할 생각 이니? –

1

나는 문제가 당신이 items.Instead의 아이콘이 X-그리드 센터 아이콘X 숨기기 디스플레이 대가로, CSS 클래스 예에 아이콘을 추가 모두 추가 생각 그 상태에 기반한 수업.

코드는 다음과 같습니다.

columns: [ 
      { 
       xtype: 'actioncolumn', 
       width: 50, 
       dataIndex: 'IsFilter', 
       items: [ 
        { 
         getClass: function(v, metadata, r, rowIndex, colIndex, store) { 
          var isFilter = r.get('IsFilter'); 
          if (!isFilter) { 
           return "hideDisplay"; 
          } else { 
           console.log(r.get('Title') + ' sort'); 
           return "showIcon"; 
          } 
         }, 

        }, 
        { 
         getClass: function(v, metadata, r, rowIndex, colIndex, store) { 
          if (v) { 
           return "hideDisplay"; 
          } else { 
           console.log(r.get('Title') + ' filter'); 
           return "showIcon"; 
          } 
         }, 

        } 
       ] 
      } 


CSS add the following : 


    .hideDisplay 
    { 
     width: 32px; 
     height: 32px; 
     background-image:none; 
    } 

    .showIcon 
    { 
     width: 32px; 
     height: 32px; 
     background-image:resources/Images/png/sort35.png 
    } 

희망이 도움이 될 것입니다.

+1

기본 Ext 클래스를 무시하고 이미지를 추가하는 것이 좋습니다. , 그 클래스는 ExtJs와 많이 사용되며 당신은 그 아이콘이 어디에나 나타나기를 원하지 않습니다. 오직 제자리에. 부모 메뉴에 id를 추가하고'# my-menu .x-hide-display {...'와 같은 셀렉터 내에서만 CSS를 오버라이드하면 답을 크게 향상시킬 수 있습니다. – Scriptable