2013-02-22 2 views
7

릴리스 모드에서 MVC 4 프로젝트를 실행하면 SlickGrid을 사용하는 한 페이지가 올바르게 표시되지 않았습니다. 그리드가 매우 크고 그리드 셀이 누락되었습니다.축소 코드가 원본과 다른 이유는 무엇입니까?

그러나 이것은 SlickGrid의 문제가 아니라 코드 (MVC 4에 통합 된 System.Web.Optimization)가 코드를 어떻게 축소했는지 생각합니다.

필자는 축소 된 JavaScript를 사용하여 문제가 해결 될 때까지 한 번에 한 영역에서 축소를 역전하기 시작했습니다. 나는 변화 원래

function SlickFilter(item, args) { 
    if (item.pctSortKey.key < args.percentCompleteThreshold) { 
     return false; 
    } 

    if (args.searchString != "" && item.option.indexOf(args.searchString) == -1 && item.option != "Unweighted Response" && item.option != "Median" && item.option != "Average") { 
     return false; 
    } 

    return true; 
} 

function SlickFilter(n,t){var i=n.option,r=t.searchString;return n.pctSortKey.key<t.percentCompleteThreshold||r!=""&&i.indexOf(r)==-1&&i!="Unweighted Response"&&i!="Median"&&i!="Average"?!1:!0} 

을 (그리고 스크롤을 용서, 나는있는 그대로 정확하게 축소 된 버전을 떠나고 싶어) 발견 문제가 해결되면 축소 된 파일의 다른 모든 요소 변경되지 않았습니다. SlickGrid 특정 결과를 필터링하기위한 콜백 기능을 제공

dataView.setFilter(SlickFilter); 

:

함수

처럼 사용된다.

원본과 축소 된 기능이 어떻게 동등하지 않습니까?

UPDATE

SlickGrid 내가 제공하는 필터 기능을 "컴파일"입니다. 이 컴파일 단계는 축소 된 버전에서 실패합니다.

function anonymous(_items,_args) { 
var _retval = [], _idx = 0; var n, t = _args; _coreloop: for (var _i = 0, _il = _items.length; _i < _il; _i++) { n = _items[_i]; 
    //debugger; 
    var i = n.option, 
     r = t.searchString; 

    return 
    n.pctSortKey.key < t.percentCompleteThreshold 
    || 
    r !="" 
     && i.indexOf(r)==-1 
     && i != "Unweighted Response" 
     && i != "Median" 
     && i != "Average" 
? !1 
: !0 
; } return _retval; 
} 

참고 여러 반환 문 : 컴파일 된 축소 된 코드는 것 같습니다. 이 추가 통찰력으로

, 나는 관련 SlickGrid 버그 식별 할 수 있었다 :

https://github.com/mleibman/SlickGrid/issues/301

+0

직접 작성 하시겠습니까?거기에 많은 minifier 도구가 있으므로 다른 것을 시도하는 것이 좋습니다. – lolol

+0

@lolol : 아니요. MVC 4에 통합 된'System.Web.Optimization'을 사용하고 있습니다. 명확한 질문을 업데이트했습니다. –

+0

내 잘못, 난 정말 당신을 도울 수 없어요. 죄송합니다. (비슷한 문제가 있어도 문제를 해결 한 도구를 변경하면 직접 해결하고 있습니다.) – lolol

답변

4

내가 볼 수있는 한 가지 차이점은 item.option 및 args.searchString 평가되고 있다는 것입니다을 경우에도 첫 번째 조건 원본 코드에 없었 더라면 사실입니다.

값을 확인하고 코드 값이 어떻게 작동하는지 보려 했습니까?

동일한 작업을 수행하는 다른 사람을 저장하거나 시도하고 시도하고 싶다면 여기에 축소 된 코드를 작성하십시오. (OP에 의해)

function SlickFilter(n,t) { 
var i = n.option, 
    r = t.searchString; 

return 
     n.pctSortKey.key < t.percentCompleteThreshold 
     || 
     r !="" 
      && i.indexOf(r)==-1 
      && i != "Unweighted Response" 
      && i != "Median" 
      && i != "Average" 
    ? !1 
    : !0 
} 

편집

이 옳은 길을 저를 얻었다, 그러나 SlickGrid 필터 기능을 "컴파일"되는 것으로 나타났다. 컴파일러가 때때로 실패하는 알려진 문제가 있습니다. 실제로 컴파일은 선택적이며이 경우에는 minifier가 이미 최적화 된 코드를 생성하기 때문에 필요하지 않습니다.

https://github.com/mleibman/SlickGrid/issues/301

+0

나는 당신과 함께 있습니다 - 그것이 제가 보는 유일한 차이입니다. 하지만이 두 항목을 평가할 때의 차이점은 아무런 효과가 없어야합니다. 단지 값을 반환하기 때문에 코드가 실제로 다르게 실행되지 않습니다. 그들이 존재하지 않더라도 그들은 정의되지 않은 상태로 돌아가고 코드는 계속 될 것입니다. 단락 된'|| '는 첫 번째 줄이 발생하지 않는 한'i'와'r'의 값이 사용되지 않는다는 것을 의미합니다. 이것은'if' 문과 별개의 동작입니다. –

+0

올바른 괄호로 수정하겠습니까?, 리턴에서? – technosaurus

+0

레코드의 경우이 형식의 버전은 내가 게시 한 버전과 동일한 동작을합니다. 나는 당신의 제안에 근거하여 부작용을 찾기 위해 지금 디버깅 중이다. 내가 알려 주마! –

관련 문제