удаление элементов из таблицы данных додзё - PullRequest
0 голосов
/ 28 ноября 2009

Я борюсь с простой сеткой данных додзё в моем проекте Zend Framework.

У меня есть список данных из таблицы mysql, который я могу отобразить, однако я хочу, чтобы пользователи могли удалять выбранные строки (и удалять их из БД). Я использую пример из Dojo DataGrid для добавления и удаления данных . Мой код для таблицы данных выглядит следующим образом.

<div dojoType="dojo.data.ItemFileReadStore" jsId="skillstore" url="<?php echo $this->baseUrl()?>/skills/hist/<?php echo $this->histid;?>"></div>

<table id="skillgrid" jsId="skills" dojoType="dojox.grid.DataGrid" store="skillstore"   style="height:300px;width:500px;">
 <thead>
    <tr>
        <th field="skillid" hidden="true"></th>
        <th width="auto" field="skill">Skills</th>
    </tr>

</thead>
</table>
<div>
<button dojoType="dijit.form.Button" onclick="removeRows()" >Remove Selected Row</button>
<button dojoType="dijit.form.Button" onclick="addRow()">Add another skill</button>
</div>

Я поместил код для удаления строк между сценариями представления captureStart и captureEnd. Код для removeRows () выглядит следующим образом.

function removeRows(e){     
    var items = skillsgrid.selection.getSelected();

    if(items.length){

        dojo.forEach(items, function(selectedItem){

            if(selectedItem !== null){

                skillstore.deleteItem(selectedItem);
            }//endif
        });//end foreach

    }//end if
}

Основная проблема, которую я получаю, заключается в том, что, когда я выбираю строку и нажимаю кнопку, firebugs жалуется, что skilltore.deleteItem не является функцией. Мне еще предстоит удалить запись из базы данных.

Любые указатели приветствуются.

Ответы [ 2 ]

1 голос
/ 04 сентября 2012

Я бы это сделал.

объявление dojo.require ("dojo.data.ItemFileWriteStore"); является обязательным. Вот почему firebugs жалуется на то, что skilltore.deleteItem не является функцией, потому что в ItemFileReadStore нет «deleteItem», но он находится в «ItemFileWriteStore».

function removeRows(e){         
        var items = skillsgrid.selection.getSelected();
        if(items.length){
                dojo.forEach(items, function(selectedItem){
                      skillsgrid.store.deleteItem(selectedItem); 
                      skillsgrid.sort(); // I did access the store of the grid directly.
                });//end foreach

        }//end if
}
0 голосов
/ 28 ноября 2009

Я думаю, все, что вам нужно сделать, это использовать значение атрибута jsId в качестве идентификатора вместо id one:

var items = skills.selection.getSelected();

EDIT

Если это не сработало, вы добавили следующее сразу после закрывающего тега body?

<script type="text/javascript" src="dojo.js" djConfig="parseOnLoad: true">
</script>
<script type="text/javascript">
    dojo.require("dojox.grid.DataGrid");
    dojo.require("dojo.data.ItemFileWriteStore");
    dojo.require("dijit.form.Button");
</script>

EDIT2

На самом деле, вы используете хранилище только для чтения, вот в чем проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...