从dojo数据网格中删除项目

时间:2009-11-28 12:05:43

标签: php zend-framework dojo

我正在Zend Framework项目中使用简单的dojo数据网格。

我有一个可以显示的mysql表中的数据列表,但我希望用户能够删除所选行(并从数据库中删除它们)。我正在使用Dojo DataGrid adding and deleting data中的示例。我在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会抱怨skillstore.deleteItem不是一个函数。我还没有尝试从数据库中删除该条目。

任何指针都会非常感激。

2 个答案:

答案 0 :(得分:1)

我会这样做。

声明dojo.require(“dojo.data.ItemFileWriteStore”);是必须的。这就是为什么firebugs抱怨skillstore.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
}

答案 1 :(得分:0)

我认为您所要做的就是使用jsId属性值作为ID而不是id

var items = skills.selection.getSelected();

修改

如果这不起作用,您是否在结束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

实际上,您使用的是只读存储,这就是问题所在。