Ошибка: Попытка зарегистрировать виджет с id==class_level_grid, но этот id уже зарегистрирован в DOJO

Привет, я получаю сообщение об ошибке при повторном выборе раскрывающегося списка в DOJO.

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"
    %>
    <!DOCTYPE html>
    <html>
    <head>
    <script>

    function onReportTypesSelect()
    {
        if(getDijitValue('data_types') != 'Select')
            {

            if(getDijitValue('data_types') == 'class_level')
            {
                require([
                            "dojo/store/JsonRest",
                            "dojo/store/Memory",
                            "dojo/store/Cache",
                            "dojox/grid/DataGrid",
                            "dojo/data/ObjectStore",
                            "dojo/query",
                            "dojo/domReady!"

                        ], function(JsonRest, Memory, Cache, DataGrid, ObjectStore, query){
                            var userStore, dataStore, grid;
                            userStore = new Cache(JsonRest({target: "<%=request.getContextPath()%>" + "/data/classServlet"}), new Memory()); 
                            grid = new DataGrid({
                                id:"class_level_grid",
                                store: dataStore = new ObjectStore({objectStore: userStore}),
                                structure: [
                                            {name: 'Roll Number', field: 'roll', width: 'auto', defaultValue: ""},
                                             {name: 'Name', field: 'name', width: '100px', defaultValue: ""},
                                            {name: 'Class', field: 'class', width: '75px', defaultValue: ""}
                                ],
                            style:"font-family: calibri, Garamond, Comic Sans; font-size: 10;",
                            selectionMode:'single',  
                            autoHeight: 10,
                            rowsPerPage:40,
                            rowSelector:'20px',
                            selectable: true
                            }

                            , "class_level_grid_div"); // make sure you have a target HTML element with this id
                            grid.startup();

                        });

            }
   if(getDijitValue('data_types') == 'class_level2')
            {
                require([
                            "dojo/store/JsonRest",
                            "dojo/store/Memory",
                            "dojo/store/Cache",
                            "dojox/grid/DataGrid",
                            "dojo/data/ObjectStore",
                            "dojo/query",
                            "dojo/domReady!"

                        ], function(JsonRest, Memory, Cache, DataGrid, ObjectStore, query){
                            var userStore, dataStore, grid;
                            userStore = new Cache(JsonRest({target: "<%=request.getContextPath()%>" + "/data/class2Servlet"}), new Memory()); 
                            grid = new DataGrid({
                                id:"class_level2_grid",
                                store: dataStore = new ObjectStore({objectStore: userStore}),
                                structure: [
                                            {name: 'Roll Number', field: 'roll', width: 'auto', defaultValue: ""},
                                             {name: 'Name', field: 'name', width: '100px', defaultValue: ""},
                                            {name: 'Class', field: 'class', width: '75px', defaultValue: ""}
                                ],
                            style:"font-family: calibri, Garamond, Comic Sans; font-size: 10;",
                            selectionMode:'single',  
                            autoHeight: 10,
                            rowsPerPage:40,
                            rowSelector:'20px',
                            selectable: true
                            }

                            , "class_level2_grid_div"); // make sure you have a target HTML element with this id
                            grid.startup();

                        });

            }

    }
    }
    </script>
    </head>`enter code here`
    <body>
    <div id="data_types" data-dojo-type="dijit/form/Select" style="width: 200px;" onchange="onReportTypesSelect()">
                         <span data-dojo-value="Select"><b>Select</b></span>
                        <span data-dojo-value="class_level"><b>class Level</b></span>
                        <span data-dojo-value="class_level2"><b>class Level</b></span>
    </div>
    <div id="class_level_grid_div" style="width: 95%; height: 90%;"> </div>
    </div>
    <div id="class_level2_grid_div" style="width: 95%; height: 90%;"> </div>
    </div>
    </body>
    </html>

Ошибка возникает как Ошибка: Попытка зарегистрировать виджет с id==class_level_grid, но этот идентификатор уже зарегистрирован. когда снова выберете раскрывающийся список, пожалуйста, помогите мне.


person bhanuj    schedule 07.01.2015    source источник


Ответы (1)


вы не можете заполнить сетку над другой сеткой, не уничтожив первую, которую вы создали.

поэтому, если у вас есть сетка с id=MyGrid, помещенная в div, этот div будет удален, и сетка заменит его.

поэтому вам нужно использовать два метода: placeAt и grid.destroyRecursive(true);

приведенный ниже код должен работать нормально.

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"
    %>
    <!DOCTYPE html>
    <html>
    <head>
    <script>

    function onReportTypesSelect()
    {
        if(getDijitValue('data_types') != 'Select')
            {

            if(getDijitValue('data_types') == 'class_level')
            {
                require([
                            "dojo/store/JsonRest",
                            "dojo/store/Memory",
                            "dojo/store/Cache",
                            "dojox/grid/DataGrid",
                            "dojo/data/ObjectStore",
                            "dojo/query",
                            "dijit/registry",
                            "dojo/domReady!"

                        ], function(JsonRest, Memory, Cache, DataGrid, ObjectStore, query,registry){
                        //we are checking here if the grid with that ID already exists and if yes destroy it
                        if(typeof registry.byId("class_level_grid_div") != "undefined"){
                        registry.byId("class_level_grid_div").destroyRecursive();
                        }
                            var userStore, dataStore, grid;
                            userStore = new Cache(JsonRest({target: "<%=request.getContextPath()%>" + "/data/classServlet"}), new Memory()); 
                            grid = new DataGrid({
                                id:"class_level_grid",
                                store: dataStore = new ObjectStore({objectStore: userStore}),
                                structure: [
                                            {name: 'Roll Number', field: 'roll', width: 'auto', defaultValue: ""},
                                             {name: 'Name', field: 'name', width: '100px', defaultValue: ""},
                                            {name: 'Class', field: 'class', width: '75px', defaultValue: ""}
                                ],
                            style:"font-family: calibri, Garamond, Comic Sans; font-size: 10;",
                            selectionMode:'single',  
                            autoHeight: 10,
                            rowsPerPage:40,
                            rowSelector:'20px',
                            selectable: true
                            }).placeAt("class_level_grid_div"); // use the placeAt so you don't replace the dom
                            grid.startup();

                        });

            }
   if(getDijitValue('data_types') == 'class_level2')
            {
                require([
                            "dojo/store/JsonRest",
                            "dojo/store/Memory",
                            "dojo/store/Cache",
                            "dojox/grid/DataGrid",
                            "dojo/data/ObjectStore",
                            "dojo/query",
                            "dijit/registry",
                            "dojo/domReady!"

                        ], function(JsonRest, Memory, Cache, DataGrid, ObjectStore, query,registry){
                            var userStore, dataStore, grid;

                                if(typeof registry.byId("class_level2_grid_div") != "undefined"){
                        registry.byId("class_level2_grid_div").destroyRecursive();
                        }


                            userStore = new Cache(JsonRest({target: "<%=request.getContextPath()%>" + "/data/class2Servlet"}), new Memory()); 
                            grid = new DataGrid({
                                id:"class_level2_grid",
                                store: dataStore = new ObjectStore({objectStore: userStore}),
                                structure: [
                                            {name: 'Roll Number', field: 'roll', width: 'auto', defaultValue: ""},
                                             {name: 'Name', field: 'name', width: '100px', defaultValue: ""},
                                            {name: 'Class', field: 'class', width: '75px', defaultValue: ""}
                                ],
                            style:"font-family: calibri, Garamond, Comic Sans; font-size: 10;",
                            selectionMode:'single',  
                            autoHeight: 10,
                            rowsPerPage:40,
                            rowSelector:'20px',
                            selectable: true
                            }).placeAt("class_level2_grid_div"); // make sure you have a target HTML element with this id
                            grid.startup();

                        });

            }

    }
    }
    </script>
    </head>`enter code here`
    <body>
    <div id="data_types" data-dojo-type="dijit/form/Select" style="width: 200px;" onchange="onReportTypesSelect()">
                         <span data-dojo-value="Select"><b>Select</b></span>
                        <span data-dojo-value="class_level"><b>class Level</b></span>
                        <span data-dojo-value="class_level2"><b>class Level</b></span>
    </div>
    <div id="class_level_grid_div" style="width: 95%; height: 90%;"> </div>
    </div>
    <div id="class_level2_grid_div" style="width: 95%; height: 90%;"> </div>
    </div>
    </body>
    </html>
person dori naji    schedule 07.01.2015
comment
Привет @dori naji Спасибо, чувак, все сработало!!!! Я хотел бы добавить исправление, которое должно быть (class_level_grid), а не (class_level_grid_div) при проверке реестра. } помечая это как ответ.. еще раз спасибо - person bhanuj; 08.01.2015