AFX
AFX

Reputation: 366

DOJO Datagrid remove row via button

I have a DOJO Datagrid up and running. It is based on an itemFileWriteStore.

Through a formatter-function I added a button including a OnClick-Function to

  1. Get the the attribute "work_id" (it is in the store)
  2. Make an Ajax-Call to delete the entry
  3. Remove it from store and update the grid

Here's the Code:

    //BUTTON-FORMATTER
     function buttonFormatterRemove(){
        var w = new Button({
            label: "Löschen",
            iconClass: "dijitEditorIcon deleteIcon",
            showLabel: false,
            onClick: function() {
                    console.log(this);
                    if (confirm("Datensatz wirklich löschen?")){

                        var item = grid.selection.getSelected();
                        var work_id = grid.store.getValue(item[0], "work_id");
                        //alert(work_id);

                        //FIRE REQUEST
                            request.post("<?php echo site_url('work/delete'); ?>/"+work_id, {

                              }).then(function(text){
                                    if(text ==  1){
                                                console.log("Entry with ID"+work_id+" deleted!")
                                                workStore.deleteItem(item[0]); 
                                                grid.startup();
                                    } else alert("Es ist ein Fehler aufgetreten");
                                });     
                    }          

            }
        });
        w._destroyOnRemove=true;
        return w;
    }

So far so good...it works! But only when I clicked into the datagrid before. Doesn't matter where I clicked.

If I refresh the page and click the button directly it throws:

Uncaught Error: dojo.data.ItemFileWriteStore: Invalid item argument. 

Does anyone know how to get a handle to work_id in the specific row?

Thank you in advance! AFX

Upvotes: 2

Views: 3617

Answers (1)

AFX
AFX

Reputation: 366

I was able to fix it myself:

I realized that the formatter has optional arguments:

  //BUTTON-FORMATTER
     function buttonFormatterRemove(col, rowIndex){

With those arguments I could get a handle on the row:

        var rowdata = this.grid.getItem(rowIndex);
        var work_id = rowdata['work_id'];

This blog-post helped me alot: http://documentumcookbook.wordpress.com/2010/08/06/dojo-datagrid-combining-field-values-in-formatter/

Thanks anyways!

Upvotes: 3

Related Questions