당신은 이미 문제 영역은 compileFilter
,하지만 질문을했고이 게시물 날 근본 원인을 파악 도왔 것을 알아 냈 : https://github.com/mleibman/SlickGrid/issues/244
내 생각 엔 : 슬릭 그리드의 저자는 당신이 얻을 수 options.inlineFilters = false
를 사용하는 것이 선호 이 주변.
나는이 문제는 ASP.NET에서 번들 것은 사용되었을 때 발생 이유를 이해 원했고, 이걸 발견 :
return true
및 return false
이 return!0
및 return!1
로 대체됩니다 ASP.NET 번들링 및 축소에서는,을 사용하여, 각기.
(당신이
Bundle.Transforms.Clear()
를 호출 할 경우에도이 문제가 발생)
슬릭 그리드의 compileFilter
및 compileFilterWithCaching
기능 루프 구조의 내부에 필터 기능을 재 작성 정규식을 사용하려고하고 continue
문에 return
문을 변경합니다.
번들링에서 필터 기능을 제거한 솔루션도 나에게 효과적 이었지만 번들링을 사용하는 데 예외가 없기 때문에 대신 slick.dataview.js (v2.2)를 수정하여 ASP 용 대체품을 처리했습니다. .NET 번들 :
나는 compileFilter
및 compileFilterWithCaching
이 두 줄을 추가 : 그래서
var filterBody = filterInfo.body
.replace(/return false\s*([;}]|$)/gi, "{ continue _coreloop; }$1")
.replace(/return true\s*([;}]|$)/gi, "{ _retval[_idx++] = $item$; continue _coreloop; }$1")
.replace(/return ([^;}]+?)\s*([;}]|$)/gi,
"{ if ($1) { _retval[_idx++] = $item$; }; continue _coreloop; }$2");
이
var filterBody = filterInfo.body
.replace(/return false\s*([;}]|$)/gi, "{ continue _coreloop; }$1")
.replace(/return true\s*([;}]|$)/gi, "{ _retval[_idx++] = $item$; continue _coreloop; }$1")
.replace(/return!1\s*([;}]|$)/gi, "{ continue _coreloop; }$1") // hack: .net bundling uses !1 for false
.replace(/return!0\s*([;}]|$)/gi, "{ _retval[_idx++] = $item$; continue _coreloop; }$1") // hack: .net bundling uses !0 for true
.replace(/return ([^;}]+?)\s*([;}]|$)/gi,
"{ if ($1) { _retval[_idx++] = $item$; }; continue _coreloop; }$2");
가 지금은 모든 번들로 계속되었다
.replace(/return!1\s*([;}]|$)/gi, "{ continue _coreloop; }$1") // hack: .net bundling uses !1 for false
.replace(/return!0\s*([;}]|$)/gi, "{ _retval[_idx++] = $item$; continue _coreloop; }$1") // hack: .net bundling uses !0 for true
내 스크립트를 사용하여 ASP.NET B & M, 그리고 매끄러운 격자 행복합니다.
업데이트 : compileFilterWithCaching은 실제로 캐시 추가 단계로 인해 약간 다릅니다. function compileFilterWithCaching()
에 업데이 트를 수정입니다 : 내가 GitHub의에서이 변화에 대한 풀 요구를 고려 중이 야하지만 ... TBD 번들 ASP.NET을 처리하는 여부에 대한 옵션을 추가 할 수 먼저 조금을 개정 할 수 있습니다
var filterBody = filterInfo.body
.replace(/return false\s*([;}]|$)/gi, "{ continue _coreloop; }$1")
.replace(/return true\s*([;}]|$)/gi, "{ _cache[_i] = true;_retval[_idx++] = $item$; continue _coreloop; }$1")
.replace(/return!1\s*([;}]|$)/gi, "{ continue _coreloop; }$1") // hack: .net bundling uses !1 for false
.replace(/return!0\s*([;}]|$)/gi, "{ _cache[_i] = true;_retval[_idx++] = $item$; continue _coreloop; }$1") // hack: .net bundling uses !0 for true
.replace(/return ([^;}]+?)\s*([;}]|$)/gi,
"{ if ((_cache[_i] = $1)) { _retval[_idx++] = $item$; }; continue _coreloop; }$2");
. 그동안 GitHub 페이지에이 문제를 게시했습니다 : https://github.com/mleibman/SlickGrid/issues/1053
나는 그렇게 정교하지 않았다 :) 대답을 수락했다. 잘 했어! –