2011-04-26 2 views
0

잘 작동하는 행을 선택했습니다. 그런 다음 OLN을 사용하도록 코드를 리팩토링하고 일부 그리드에 기본값을 추가했습니다. 여기 (multi) 행 선택시 'className'이 null이거나 객체가 아닌 경우 jqGrid에서 오류를 발생시키는 문제를 해결하려면 어떻게해야합니까?

코드의 기본 블록 :

var Grid = { 
SiteMaster: { 
    setDefaults: function() { 
     $.jgrid.defaults = $.extend($.jgrid.defaults, { 
      datatype: 'json', 
      height: "100%", 
      loadui: 'block', 
      images: "/images/", 
      jsonReader: { 
       root: "Rows", 
       page: "Page", 
       total: "Total", 
       records: "Records", 
       repeatitems: false, 
       userdata: "UserData", 
       id: "Id" 
      }, 
      loadui: "block", 
      mtype: 'GET', 
      autowidth: true, 
      rowNum: 10, 
      rowList: [10, 20], 
      viewrecords: true 
     }); 
    } 
    } 
}; 

을 여기에 실제 그리드 코드 : 여기

setupGrid: function (grid, pager) { 
      disableControls(); 
      grid.jqGrid({ 
       colNames: ['Description', 'Ship Date', 'Memo'], 
       colModel: [ 
        { name: 'Description', index: 'Description', width: 400, align: 'left' }, 
        { name: 'ShipDateDisplay', index: 'ShipDateDisplay', width: 100, align: 'left' }, 
        { name: 'Memo', index: 'Memo', width: 200, align: 'left'}], 
       pager: pager, 
       url: gridurl, 
       pager: pager, 
       multiselect: true, 
       multiboxonly: true, 
       loadComplete: enableControls 
      }); 

      initGridSearch(); 
     } 

내 스크립트 참조가 너무 :

<script src="/CommonWeb/js/common.js" type="text/javascript"></script> 
<script src="/CommonWeb/js/jquery.js" type="text/javascript"></script> 
<script src="/CommonWeb/js/jquery.ui.js" type="text/javascript"></script> 
<script src="/CommonWeb/js/jquery.blockUI.js" type="text/javascript"></script> 
<script src="/CommonWeb/js/grid.locale-en.js" type="text/javascript"></script> 
<script src="/CommonWeb/js/jquery.jqGrid.js" type="text/javascript"></script>  
<script src="/CommonWeb/js/grid.addons.js" type="text/javascript"></script>  
<script src="/CommonWeb/js/grid.postext.js" type="text/javascript"></script>  
<script src="/CommonWeb/js/grid.setcolumns.js" type="text/javascript"></script>  
<script src="/CommonWeb/js/jquery.contextmenu.js" type="text/javascript"></script>  
<script src="/CommonWeb/js/jquery.searchFilter.js" type="text/javascript"></script>  
<script src="/CommonWeb/js/jquery.tablednd.js" type="text/javascript"></script>  
<script src="/CommonWeb/js/ui.multiselect.js" type="text/javascript"></script>  
<script src="@Url.Content("~/Content/js/Global.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Content/js/Grid.js")" type="text/javascript"></script> 

이후 리팩토링, 때마다 행을 클릭하거나 체크 박스 컨트롤을 통해 선택, 나는 자바 스크립트 오류 'className'이 null이거나 객체가 아닙니다. 아이디어가 있으십니까? 미리 감사드립니다.

답변

1

밝혀졌습니다. 데이터와 함께 고유 식별자를 보내지 않았습니다. 이 데이터는 키가없는 레거시 테이블에서 가져옵니다. ID 필드를 쳐서 ID를 생성하면 모든 것이 다시 작동하기 시작합니다.

+0

동일한 문제가 있었지만 ID 필드가 있습니다. 문제는이 필드의 데이터가 고유하지 않은 것이 었습니다 (* yikes *). – user4531

0

문제를 재현 할 수있는 코드를 게시하지 않았습니다. jqGrid의 어떤 버전을 사용합니까?

$.jgrid.defaults에 일부 기본값을 설정하려는 setDefaults의 코드가 잘못된 것 같습니다. $.extend($.jgrid.defaults, {...})의 결과를 $.jgrid.defaults에 할당하면 안됩니다. 올바른 번호는 $.extend입니다.

images: "/images/"은 무엇입니까? loadui: 'block'을 두 번 (두 번째로 loadui: "block") 정의 할 필요가 없습니다.

삽입하기 전에 jquery.jqGrid.js을 삽입하거나 grid.locale-en.js을 삽입하는 것은 잘못되었습니다. 내부를 보시려면 jquery.jqGrid.js을 추천합니다. jqGrid 버전 4.0에는 jquery.jqGrid.src.js이 포함되어 있습니다.

왜 모듈을 많이 삽입 했나요? 그것을 사용합니까? 예를 들어 이전의 jquery.searchFilter.js을 삽입하면 jqGrid의 새로운 검색 모듈 grid.filter.js을 덮어 쓸 수 있습니다.

colModel에서 기본값 align: 'left'을 제거해야합니다.

+0

dup 항목 및 추가 모듈에 대한 정보를 제공해 주셔서 감사합니다. 나는 모듈에 대해 정말로 생각하지 않았고, 그것들을 모두 넣었습니다. 이것은 jqGrid 4.0이므로, 당신이 바로 그것입니다. jqgrid 파일 다음에 로켈 파일을 이동하면 오류가 발생합니다. 단지 fyi입니다. 그래도 내 문제를 해결했지만 답변을 참조하십시오. – IronicMuffin

+0

@IronicMuffin : "jqgrid 파일 다음에 로케일 파일"을 이동하면'grid.locale-en.js'가'jquery.jqGrid.js'의 일부로 삽입되므로 다른 오류가 발생합니다. 문제는 jqGrid **에는 **'jquery.jqGrid.js' 파일이 없다는 것입니다. 'scr' 디렉토리에는'grid.loader.js' 만 있습니다. 서버 응답에 고유하지 않은 ID가 있으면 오류이지만 설명 된 것처럼 ** 예외가 없습니다 **. 일부 JavaScript 파일을 포함시키지 않거나 ** 한 번에 하나의 JavaScript 파일 **을 포함하는 경우 예외가 발생합니다. 나는 그것이 당신의 잘못이라고 확신합니다. – Oleg

+0

Oleg, jquery.jqGrid.src.js의 이름을 jquery.jqGrid.js로 변경했습니다. 나는 귀하의 예외 분석에 동의하지 않습니다. 고유 한 ID를 반환해야하며 즉시 작동합니다. – IronicMuffin

관련 문제