2013-05-10 1 views
9

Esiste un evento equivalente a onEditComplete per Kendo Grid in cui l'evento viene attivato solo dopo che il contenuto della cella è stato modificato?Kendo Grid equivalente di onEditComplete

Documentation menziona l'evento "modifica", ma questo si attiva non appena la cella entra in modalità di modifica (quindi questo è equivalente a onBeginEdit).

L'evento più vicino con il comportamento desiderato che ho trovato era l'evento "salva", ma questo evento si attiva solo quando il contenuto della cella è stato modificato. Voglio un evento che si attiva non appena la cella esce dalla modalità di modifica.

La modalità di modifica della griglia è impostata su incell.

+0

Poiché questo problema sembra essere aperto da tre anni e Telerik non ha fornito una soluzione ufficiale: hai aperto una richiesta di funzionalità a Telerik? C'è un evento "itemChange" nella griglia, ma non è documentato e non indica il nome della colonna. – Rolf

risposta

8

Così a causa del commento ho rimosso la mia risposta precedente - utilizzando l'evento blur sulle caselle di immissione (o altri elementi) sembra funzionare:

Sull'evento grid.edit, utilizzare jquery per associare all'evento di sfocatura della casella di testo (o qualsiasi altro controllo di modifica in linea) che viene generato quando lo stato attivo viene perso. Aggiungi questo alla definizione della griglia ... e ovviamente sostituisci l'avviso con il tuo codice.

edit: function (e) { 
     alert('Edit Fired'); 
     $('input.k-input.k-textbox').blur(function() { 
      alert('blur event called'); 
     }); 
    }, 

Ho provato questo modificando il codice di modifica in linea del campione here

mio pieno fonte locale della modifica - vedono solo l'evento di modifica sulla definizione della griglia:

<div id="example" class="k-content"> 
    <div id="grid"></div> 

    <script> 
     $(document).ready(function() { 
      var crudServiceBaseUrl = "http://demos.kendoui.com/service", 
       dataSource = new kendo.data.DataSource({ 
        transport: { 
         read: { 
          url: crudServiceBaseUrl + "/Products", 
          dataType: "jsonp" 
         }, 
         update: { 
          url: crudServiceBaseUrl + "/Products/Update", 
          dataType: "jsonp" 
         }, 
         destroy: { 
          url: crudServiceBaseUrl + "/Products/Destroy", 
          dataType: "jsonp" 
         }, 
         create: { 
          url: crudServiceBaseUrl + "/Products/Create", 
          dataType: "jsonp" 
         }, 
         parameterMap: function (options, operation) { 
          if (operation !== "read" && options.models) { 
           return { models: kendo.stringify(options.models) }; 
          } 
         } 
        }, 
        batch: true, 
        pageSize: 20, 
        schema: { 
         model: { 
          id: "ProductID", 
          fields: { 
           ProductID: { editable: false, nullable: true }, 
           ProductName: { validation: { required: true } }, 
           UnitPrice: { type: "number", validation: { required: true, min: 1 } }, 
           Discontinued: { type: "boolean" }, 
           UnitsInStock: { type: "number", validation: { min: 0, required: true } } 
          } 
         } 
        } 
       }); 

      $("#grid").kendoGrid({ 
       dataSource: dataSource, 
       pageable: true, 
       height: 430, 
       toolbar: ["create"], 
       // added in hook to here to bind to edit element events. 
       // blur is fired when an element loses focus 
       edit: function (e) { 
        alert('Edit Fired'); 
        $('input.k-input.k-textbox').blur(function (e) { 
         alert('blur event called'); 
        }); 
       }, 
       columns: [ 
        "ProductName", 
        { field: "UnitPrice", title: "Unit Price", format: "{0:c}", width: "100px" }, 
        { field: "UnitsInStock", title: "Units In Stock", width: "100px" }, 
        { field: "Discontinued", width: "100px" }, 
        { command: ["edit", "destroy"], title: "&nbsp;", width: "172px" }], 
       editable: "inline" 
      }); 
     }); 
    </script> 
</div> 
+0

Ho associato l'origine dati da remoto e l'utilizzo di questo significherebbe che l'evento viene generato quando l'origine dati stessa viene modificata.Voglio che l'origine dati sia intatta, ho letteralmente bisogno che l'evento si attivi se la cella esce dalla modalità di modifica. – l46kok

+1

sono riuscito ad agganciare l'evento di sfocatura sulla casella di testo, che dovrebbe sparare solo quando la casella di testo perde lo stato attivo: ho provato. se vuoi collegarti a un altro elemento diverso dalla casella di testo, modifica il selettore jquery nel codice di evento grid.edit - vedi la mia modifica –

1

Hai provato il Change Event

"cambiare

generato quando l'utente seleziona una riga di tabella o cella della griglia."

Esempio - ottenere il dato selezionato (s) quando si utilizza la selezione delle cellule

<div id="grid"></div> 
<script> 
function grid_change(e) { 
    var selectedCells = this.select(); 
    var selectedDataItems = []; 
    for (var i = 0; i < selectedCells.length; i++) { 
    var dataItem = this.dataItem(selectedCells[i].parentNode); 
    if ($.inArray(dataItem, selectedDataItems) < 0) { 
     selectedDataItems.push(dataItem); 
    } 
    } 
    // selectedDataItems contains all selected data items 
} 
$("#grid").kendoGrid({ 
    columns: [ 
    { field: "name" }, 
    { field: "age" } 
    ], 
    dataSource: [ 
    { name: "Jane Doe", age: 30 }, 
    { name: "John Doe", age: 33 } 
    ], 
    selectable: "multiple, cell" 
}); 
var grid = $("#grid").data("kendoGrid"); 
grid.bind("change", grid_change); 
</script> 
+0

Anche in questo caso, come esplicitamente specificato nell'OP, ho bisogno di un evento che si attiva quando la modifica è completa nella cella. Quello che hai suggerito è più o meno simile a onBeginEdit. Quello di cui ho bisogno è suEditComplete. – l46kok

2

Perché non stai usando l'evento "sfocatura"?

http://www.kendoui.com/forums/ui/window/possible-to-close-window-when-it-loses-focus-.aspx

$("#window").blur(function(){ 
     if ($(document.activeElement).closest(".k-window").length == 0) { 
     $("#window").data("kendoWindow").close(); 
     } 
    }); 

http://api.jquery.com/blur/

+0

Questo evento funziona per la griglia con la modalità di modifica dell'incantesimo? – l46kok

+0

Da quello che so non ci sono eventi come "onEditComplete". ma puoi ottenere l'elemento con un selettore CSS e impostare la funzione sfocatura. Questo: ".k-grid-content> table> tbody> tr> td" sarà il selettore css per http://demos.kendoui.com/web/grid/editing-custom.html – user23031988