2017-03-13 3 views
0

매끄러운 그리드 사용자 정의 셀 포맷터에서 사용자 정의 각 필터 포매터를 적용하는 방법

가정하자 나는 한 형식에서 날짜를 변환 각도 고객 필터 포맷터가 다른 형식.

var dateFilter = this.$filter('myDateFilterFormatter')('2006-04-07'); 

4/7/06으로 반환됩니다.

어떻게 내가 이런 식으로

this.dateFommatter = function(row, cell, value, columnDef, dataContext){ 
      return "<p>"+ value | myDateFilterFormatter +"</p>"; 
     }; 

또한
this.dateFommatter = function(row, cell, value, columnDef, dataContext){ 
       return "<p>"+ this.$filter('myDateFilterFormatter')(value) +"</p>"; 
      }; 

이 두 방식은 오류로 종료하려고 시도했다 매끄러운 그리드 사용자 정의 셀 포맷

에 myDateFilterFormatter를 사용할 수 있습니다. 매끄러운 격자 행 포맷터에서 사용자 정의 필터를 적용 할 수 없습니다. 제발, 제발 매끄러운 격자에 사용자 정의 필터를 사용할 수 있습니다 제안하시기 바랍니다.

답변

1

this하는 dateFormatter 함수는 함수 자체를 의미한다.

그것은 당신이 cellNode에 대한 액세스를 얻기에 관하여 요구하고 생각 예를 들어, 두 번째 쿼리입니다 포맷터를 호출하는 코드에 대답하기 위해

var self = this; 

... code ... 

this.dateFommatter = function(row, cell, value, columnDef, dataContext){ 
    return "<p>"+ self.$filter('myDateFilterFormatter')(value) +"</p>"; 
}; 

처럼

function updateCell(row, cell) { 
    var cellNode = getCellNode(row, cell); 
    if (!cellNode) { 
    return; 
    } 

    var m = columns[cell], d = getDataItem(row); 
    if (currentEditor && activeRow === row && activeCell === cell) { 
    currentEditor.loadValue(d); 
    } else { 
    cellNode.innerHTML = d ? getFormatter(row, m)(row, cell, getDataItemValueForColumn(d, m), m, d) : ""; 
    invalidatePostProcessingResults(row); 
    } 
} 

뭔가를 사용하는 것이 일반적이다 . 당신은 당신의 포맷에

var cellNode = grid.getCellNode(row, cell); 

을 추가 할 수 있습니다 당신이 좋아하는 경우에. 당신이 유용 셀 노드에 액세스 할 수 있도록 찾을 경우 장기적으로

는, 당신은 매개 변수 목록의 마지막에 cellNode를 추가하려면 formatter 기능, 그리고 모든 호출을 수정할 수 있습니다. 그러나 이것은 slickgrid 코드의 수정 일 것입니다.

EDIT : 실제로이 테스트를 통과 한 후 셀을 만들 때 셀이 만들어지기 전에 포맷터가 호출되기 때문에 작동하지 않습니다. SlickGrid의 최신 릴리스에서 포맷터를 수정하여 문자열을 반환하는 대신 객체 { text: 'displayText', removeClasses: 'class1 class2', addClasses: 'class1' }을 선택적으로 반환 할 수 있으며 포맷터가 적용될 때 클래스가 제거되고 셀에 추가됩니다. 클래스 범위를 제거하면 올바른 형식을 적용하기 전에 이전 형식 지정 클래스를 지울 수 있습니다.

+0

감사합니다. 나를 위해 일하고 있습니다. 왜이 셀프와 셀프의 차이점이 있습니까? –

+0

'''this''는 코드 컨텍스트를 참조하는 특수한 javascript 내장 변수입니다. 상단에서''이''는 컨트롤러를 가리키고 있으므로''self''를 변수에 설정할 수 있습니다 (컨트롤러를''컨트롤러''또는 다른 것으로 부를 수도 있습니다). 함수 내에서'''this''는 컨트롤러가 아닌 함수를 참조하므로 이전에 정의 된 변수''self'''를 사용하여 컨트롤러를 참조합니다. 덕분에 –

+0

. 나는 지금 이해했다. 하지만 한 가지 더 문제가 있습니다. 우리가 ng-click을 사용하여 함수를 호출 할 수있는 방법은 formatter에 의해 리턴 된 엘리먼트입니다. –

0

필터를 호출 할 때 this을 제거하십시오.

변화 "<p>"+ this.$filter('myDateFilterFormatter')(value) +"</p>"

내부 "<p>"+ $filter('myDateFilterFormatter')(value) +"</p>"

Demo

+0

컨트롤러에서 필터를 사용할 수 있지만 매끄러운 격자 행 포맷터 안에 문제가 있습니다. 사용자 정의 포매터를 사용하여 셀 데이터를 포맷하려고합니다. ( –