2013-05-10 5 views
9

Gibt es ein Ereignis, das äquivalent zu onEditComplete für Kendo Grid ist, wo das Ereignis erst ausgelöst wird, nachdem der Inhalt der Zelle bearbeitet wurde?Kendo-Grid-Äquivalent zu onEditComplete

Documentation erwähnt "edit" -Ereignis, aber dieses wird ausgelöst, sobald die Zelle in den Bearbeitungsmodus wechselt (Dies entspricht also onBeginEdit).

Das nächste Ereignis mit dem gewünschten Verhalten, das ich gefunden habe, war das Ereignis "save", aber dieses Ereignis wird nur ausgelöst, wenn der Inhalt der Zelle geändert wurde. Ich möchte ein Ereignis, das ausgelöst wird, sobald die Zelle den Bearbeitungsmodus verlässt.

Der Editiermodus des Rasters wird auf incell gesetzt.

+0

Da dieses Problem seit drei Jahren offen zu sein scheint und Telerik keine offizielle Lösung bereitgestellt hat - haben Sie eine Feature-Anforderung bei Telerik gestartet? Es gibt ein "itemChange" -Ereignis im Grid, aber es ist nicht dokumentiert und es sagt Ihnen nicht den Spaltennamen. – Rolf

Antwort

8

So aufgrund der Bemerkung, die ich meine vorherigen Antwort entfernt habe - das Unschärfe-Ereignis auf den Eingabefeldern (oder anderen Elementen) scheint zu funktionieren:

Verwenden Sie auf dem grid.edit -Ereignis jquery, um an das Textfeld (oder ein anderes Inline-Bearbeitungssteuerelement) zu binden, das ausgelöst wird, wenn der Fokus verloren geht. Fügen Sie diese an die Rasterdefinition an ... und ersetzen Sie die Warnung offensichtlich durch Ihren Code.

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

Ich habe dies getestet, indem die Probe inline bearbeitet Code zu ändern here

Meine volle lokale Quelle der Edit - nur das Bearbeitungs Ereignis auf dem Gitter def sehen:

<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

Ich habe die Datenquelle per Fernzugriff gebunden und dies bedeutet, dass das Ereignis ausgelöst wird, wenn die Datenquelle selbst geändert wird.Ich möchte, dass die Datenquelle intakt ist. Ich brauche das Ereignis buchstäblich nur, wenn die Zelle den Bearbeitungsmodus verlässt. – l46kok

+1

Ich schaffte es, in das Blur-Ereignis in der Textbox, die nur ausgelöst werden soll, wenn das Textfeld den Fokus verliert - ich habe es getestet. Wenn Sie in ein anderes Element als ein Textfeld einhaken möchten, ändern Sie einfach den jQuery-Selektor im grid.edit-Ereigniscode - siehe meine Bearbeitung. –

1

haben Sie die versucht Change Event

ausgelöst, wenn der Benutzer eine Tabellenzeile oder eine Zelle in dem Gitter auswählt ändern.“

Beispiel - das ausgewählte Datenelement (e) erhalten, wenn die Zellauswahl mit

<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

Wiederum, wie im OP explizit angegeben, brauche ich ein Ereignis, das ausgelöst wird, wenn die Bearbeitung in der Zelle abgeschlossen ist. Was Sie vorgeschlagen haben, ist mehr oder weniger ähnlich zu onBeginEdit. Was ich brauche ist onEditComplete. – l46kok

2

Warum Benutzt du das Ereignis "Unschärfe" nicht?

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

Funktioniert dieses Ereignis für Gitter mit Bearbeitungsmodus im Zellmodus? – l46kok

+0

Von dem, was ich weiß, gibt es keine Ereignisse wie "onEditComplete". aber Sie können das Element mit einem CSS-Selektor bekommen und die Unschärfe-Funktion einstellen. Dies: ".k-grid-content> table> tbody> tr> td" ist der CSS-Selektor für http://demos.kendoui.com/web/grid/editing-custom.html – user23031988