2016-08-22 4 views
0

Ich habe ein KendoGrid mit einem DataBound-Funktionssatz.Kendo Grid Databound wird rekursiv

Im Folgenden finden Sie ein Beispiel für meinen Code, innerhalb der Datenbank sind einige Sets, die die UI-Ansicht aktualisieren. Dieses Problem ist, dass, wenn ich einen Debugger auf die zweite Zeile (var pageData ...) setze, kann ich beobachten, wie die .set die DataBound-Funktion erneut auslöst. Ich würde annehmen, dass die Funktion einmal ausgeführt werden sollte, und dass .sets es nicht erneut auslösen würde.

Wenn Sie eine Ahnung haben, was ich falsch mache, bitte helfen Sie.

Dank
function() { 
    var pageData = grid.dataSource.data(); 
    $.each(pageData, function(index, row){ 
     if (row.Id == cachedRowWithChanges.Id) { //example 
      row.set("CartTotal", cachedRowWithChanges.CartTotal); 
     } 
    }); 
} 

Antwort

0

einen Datenelementwertes über set() Einstellung löst das change Ereignis der Grid Datasource-Instanz, die die Gitter wiederum bewirkt, dass erneut zu binden und den neuesten Stand seiner Daten anzuzeigen.

Was können Sie mehrere dataBound Ereignis Brennen verhindern zu tun ist:

  • verwenden, um die dataBinding Ereignis statt
  • Update die Datenelemente über eine direkte Setter, nicht über die API:

    row.CartTotal = cachedRowWithChanges.CartTotal; 
    row.dirty = true; 
    
  • Die zweite Zeile oben wird benötigt, wenn Sie die Änderungen am Remote-Datendienst über die integrierten CRUD-Operationen der Kendo-Benutzeroberfläche beibehalten möchten. Hier

ist ein Beispiel:

http://dojo.telerik.com/AYOrIL

+0

Wenn ich DataBinding die Sätze innerhalb der Funktion verwenden, rufen Sie wiederholt DataBinding und machen damit diesen Vorschlag gleichbedeutend mit DataBound. –

+0

Wenn ich .set nicht verwende, werden die angezeigten Daten nicht aktualisiert. –

1

eine unendliche Rekursion zu ändern, um zu verhindern, Sie kann eine einfache globale Variable oder ein benutzerdefinierte Eigenschaft im Raster wie folgt:

function() { 
    if (!this.__busy) { 
     this.__busy = true; 

     var pageData = grid.dataSource.data(); 
     $.each(pageData, function(index, row){ 
      if (row.Id == cachedRowWithChanges.Id) { //example 
       row.set("CartTotal", cachedRowWithChanges.CartTotal); 
      } 
     }); 

     this.__busy = false; 
    } 
}