обновление / обновление таблицы данных dojo с новым значением магазина при изменении значения в выпадающем списке - PullRequest
1 голос
/ 04 мая 2010

У меня есть поле со списком и сетка данных на моей странице. когда пользователь изменяет значение поля со списком, я должен обновить сетку с дочерними деталями недавно выбранного родителя. Как я могу добиться этого, используя поле со списком Dojo и сетку данных.

следующий фрагмент кода не работает для меня. когда я использую метод setStore в сетке с новыми данными JSON.

<div dojoType="dojo.data.ItemFileReadStore" jsId="store" url="/child/index/"></div> // grid store

<div dojoType="dojo.data.ItemFileReadStore" jsId="parentStore" url="/parent/index/"></div> // combo box store

// поле со списком

<input dojoType="dijit.form.ComboBox" value="Select" width="auto"  store="parentStore" searchAttr="name" name="parent" id="parent" onchange="displayChildren()"> 

// МОЯ СЕТКА

<table dojoType="dojox.grid.DataGrid" jsId="grid" store="store" id="display_grid"
    query="{ child_id: '*' }" rowsPerPage="2" clientSort="true"
    singleClickEdit="false" style="width: 90%; height: 400px;"
    rowSelector="20px" selectionMode="multiple">
    <thead>
        <tr>
            <th field="child_id" name="ID" width="auto" editable="false"
                hidden="true">Text</th>
            <th field="parent_id" name="Parent" width="auto"
                editable="false" hidden="true">Text</th>
            <th field="child_name" name="child" width="300px" editable="false">Text</th>
            <th field="created" name="Created Date" width="200px"
                editable="false" cellType='dojox.grid.cells.DateTextBox'
                datePattern='dd-MMM-yyyy'></th>
            <th field="last_updated" name="Updated Date" width="200px"
                editable="false" cellType='dojox.grid.cells.DateTextBox'
                datePattern='dd-MMM-yyyy'></th>
            <th field="child_id" name="Edit/Update" formatter="fmtEdit"></th>
        </tr>
    </thead>
</table>

// метод onchange родительского поля со списком, в котором я пытаюсь перезагрузить сетку новыми данными с сервера.

function displayChildren() {
                var selected = dijit.byId("parent").attr("value");
                var grid = dojo.byId('display_grid');
                var Url = "/childsku/index/parent/" + selected;
                grid.setStore(new dojo.data.ItemFileReadStore({ url: Url }));
            }

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

Я был бы рад, если бы я нашел решение для ItemFileReadStore и ItemFileWrireStore.

1 Ответ

3 голосов
/ 06 мая 2010

Я думаю, вам не хватает шага fetch () . Вот как я бы кодировал ваш обработчик событий:

function displayChildren() {
    var selected = dijit.byId("parent").attr("value");
    var store = new dojo.data.ItemFileWriteStore({ // Read or Write, no difference
        url: "/childsku/index/parent/" + selected
    });
    // Fetch the grid with the data
    store.fetch( {
        query : {},
        onComplete : function(items, request) {
            var grid = dojo.byId('display_grid');
            if (grid.selection !== null) {
                grid.selection.clear();
            }
            grid.setStore(store);
        },
        error: function(message, ioArgs) { alert(message+"\nurl: "+ioArgs.url); }
    });
}
...