2010-12-14 2 views
1

편집 가능한 내 도장 EnhancedGrid를 만드는 데 문제가 있습니다. 현재 격자 셀을 두 번 클릭 할 수 있지만 값을 변경할 수는 있지만 다시 Enter 키를 누르거나 셀을 벗어나려고하면 (즉, 새 값을 그리드에 저장하려고 할 때), "Assertion failed in ItemFileWriteStore "내 불알에 오류가있다. 다음은 Dojo EnhancedGrid 편집 가능한 문제

내 소스 코드 :

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
    <head> 
    <style type="text/css"> 
     body, html { font-family:helvetica,arial,sans-serif; font-size:90%; } 
    </style> 
    <link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/dojo/1.5/dijit/themes/claro/claro.css" /> 
    <style type="text/css"> 
     @import "http://ajax.googleapis.com/ajax/libs/dojo/1.5/dojox/grid/resources/Grid.css"; 
     @import "http://ajax.googleapis.com/ajax/libs/dojo/1.5/dojox/grid/resources/claroGrid.css"; 
     .dojoxGrid table { margin: 0; } 
    </style> 
    <script src="http://ajax.googleapis.com/ajax/libs/dojo/1.5/dojo/dojo.xd.js" djConfig="parseOnLoad: true"> 
    </script> 

    <script type="text/javascript"> 
     dojo.require("dojox.grid.EnhancedGrid"); 
     dojo.require("dojo.data.ItemFileWriteStore"); 
     dojo.require("dojox.grid.cells._base"); 

     dojo.addOnLoad(function() { 

      var layoutabc = 
      [[ 
       { 
        field: "title", 
        name: "TitleofMovie", 
        width: "300px", 
        editable: true 
       }, 
       { 
        field: "year", 
        name: "Year", 
        width: "200px", 
        editable: true 
       }, 
       { 
        field: "producer", 
        name: "Producer", 
        width: "auto", 
        editable: true, 
        type: dojox.grid.cells.Cell 
       } 
      ]]; 


      var mystore = new dojo.data.ItemFileWriteStore({ 
       url: "movies.json" 
      }); 

      // create a new grid: 
      var grid = new dojox.grid.EnhancedGrid(
       { 
        query: {}, 
        store: mystore, 
        structure: layoutabc 
       }, 
       document.createElement("div") 
      ); 
      dojo.byId("gridDiv").appendChild(grid.domNode); 

      grid.startup(); 
     }); 
    </script> 
</head> 

<body class="claro"> 
    <div id="gridDiv" style="width: 800px; height: 400px;"> 
    </div> 
</body> 

그리고 이것은 내 movies.json의 내용입니다 (데이터의 내용이 이상해, 내가 아는) :

{ 
    items: 
    [ 
     { 
      title: "Africa", 
      year: "continent", 
      producer: "Katia Lund" 
     }, 
     { 
      title: "Kenya", 
      year: "country", 
      producer: "Christine Jeffs" 
     }, 
     { 
      title: "Mombasa", 
      year: "city", 
      producer: "Ridley Scott" 
     } 
    ] 
} 
+0

추가 정보 : EnhancedGrid 대신 DataGrid를 사용하도록 변경 한 경우 모든 작업이 완료됩니다. – Hery

+0

해결 방법은 무엇입니까? "{nestedSorting : true}"에서 플러그인을 설정하고이 부분을 코드에 추가합니다. var gPlugins = "{nestedSorting : true}"; grid.plugins = gPlugins; 그러나 아무것도 변화하지 않는다; 테이블을 새로 고칠 때 행을 추가하지 마십시오. –

+0

@francesco : 'plugins'속성을 EnhancedGrid 생성자 자체에 전달했습니다. 나는 그것이 어떤 차이를 만들지는 모르지만 그것을 시도해야합니다. 문제가 해결되지 않으면 새로운 질문을하십시오.이 질문은 잠시 후에 물 었으므로 지금 사용했던 도조 버전은 다를 수 있습니다. – Hery

답변

1

문제가 해결되었습니다. 밝혀졌습니다. 단지 빈 객체 일지라도 EnhancedGrid 객체의 "plugins"속성을 정의해야합니다. 그것이 정의되면 제대로 작동합니다.

0

문제는 저장소에 식별자가 포함되어 있지 않아서 그리드가 저장소에 쓰려고하면 쓰기가 필요한 항목을 알 수있는 방법이 없다는 것입니다.

나는 아마 다음과 같이 movies.json에 대한 응답을 편집하여 시작하는 것입니다 : 당신이 레이아웃 목록에서 ID 필드를 포함 할 필요가 없습니다

{ 
    identifier:"id", 
    items: 
    [ 
     { 
      id:1 
      title: "Africa", 
      year: "continent", 
      producer: "Katia Lund" 
     }, 
     { 
      id:2 
      title: "Kenya", 
      year: "country", 
      producer: "Christine Jeffs" 
     }, 
     { 
      id:3 
      title: "Mombasa", 
      year: "city", 
      producer: "Ridley Scott" 
     } 
    ] 
} 

참고,가에 액세스 할 수 어쨌든 그리드. 또한 식별자에서 알 수 있듯이 저장소의 각 항목에 대해 고유 한 값이어야합니다. 그렇지 않으면 초기화하지 못합니다.

+0

시도해도 여전히 작동하지 않습니다. ( 레이블을 추가하려고 시도했으나 작동하지 않습니다. ( – Hery