2016-06-27 11 views
1

Ich habe eine jqGrid benutzerdefinierte Funktion als editrules: { custom: true, custom_func: checkforduplicates, required:true }Benutzerdefinierte Funktion ist nur für den Bearbeitungsmodus, nicht-Modus hinzufügen, in jqGrid

Allerdings mag ich diese Funktion nur in Add-Modus ausgeführt werden, nicht im Bearbeitungsmodus. Ist das möglich ?

EDIT: - Nach der Antwort unten von Oleg, änderte ich den Code nach unten. Die Warnung wird jedoch nicht gedruckt. Ich bin mir nicht sicher, wo ich falsch liege.

colModel: [ 
      { key: true, name: 'id', editable: false, formatter: 'integer', viewable: false, hidden: true }, 
      { 
       key: false, 
       name: 'name', 
       editable: true, 
       editrules: { 
        required: true, 
        custom: function (options) { 
         // options have the following properties 
         // cmName 
         // cm 
         // iCol 
         // iRow 
         // rowid 
         // mode - "editForm", "addForm", "edit", "add", "cell" and so on 
         // newValue - the value which need be validated 
         // oldValue - the old value 
         // some additional properties depends on the editing mode 
         alert("mode is " + options.mode); 
         if (options.mode === "add") { // "add" for inline editing 
          var grid = $("#grid"); 

          var textsLength = grid.jqGrid("getRowData"); 




          var textsLength2 = JSON.stringify(textsLength); 

          alert("i am here"); 

          var myAttrib = $.map(textsLength, 
           function (item) { return item.name }); 


          var count = 0; 
          for (var k in textsLength) { 
           if (textsLength.hasOwnProperty(k)) { 
            ++count; 
           } 
          } 

          var text, i; 


          for (i = 0; i < count; i++) { 
           text = myAttrib[i]; 
           if (value === text) { 
            return [false, " - Duplicate category name."]; 
           } 
          } 
          return [true, ""]; 
         } 
         return true; 
        } 
       } 
      }, 

Antwort

1

Freie jqGrid unterstützt alten Stil custom_func mit den Optionen value, name und iCol und die neue Stil Validierung. Um neuen Stil Validierung eines zu verwenden braucht keinen custom_func Rückruf angeben, aber custom als Calback Funktion mit einem Parameter zu definieren:

editrules: { 
    required: true, 
    custom: function (options) { 
     // options have the following properties 
     // cmName 
     // cm 
     // iCol 
     // iRow 
     // rowid 
     // mode - "editForm", "addForm", "edit", "add", "cell" and so on 
     // newValue - the value which need be validated 
     // oldValue - the old value 
     // some additional properties depends on the editing mode 
     if (options.mode === "addForm") { // "add" for inline editing 
      // do the validation 
     } 
     return true; 
    } 
} 

Bei der Validierung von Add bilden die mode Eigenschaft gleich "addForm", options.iRow === -1, options.oldValue === null, options.rowid === "_empty". Es wird empfohlen, options.mode zu verwenden, um den Bearbeitungsmodus (oder Suchmodus) im freien jqGrid zu erkennen, da die Werte anderer Eigenschaften (iRow, oldValue und rowid) vom Bearbeitungsmodus abhängen.

+0

Ist 'jqGrid 4.4.4 - jQuery Grid' ein 'freies jqGrid'? Wenn ich die obige benutzerdefinierte Funktion verwende, wird die darin enthaltene Warnungsanweisung nicht gedruckt. – Chakra

+0

Ist Indien ein Teil von Großbritannien? Es hängt vom Zeitpunkt ab. Die Lizenzvereinbarung von jqGrid wurde Ende 2014 geändert, beginnend mit der Veröffentlichung von jqGrid 4.7.1 (siehe [die Veröffentlichung] (http://www.trirand.com/blog/?p=1438)). Basierend auf MIT/GPL Lizenzen von 4.7.0 habe ich ** den Fork ** von 4.7.0 gestartet, den ich unter dem Namen "free jqGrid" im Gegensatz zu Guriddo jqGrid JS entwickle, deren Preise Sie [hier] (http: : //guriddo.net/? page_id = 103334). Daher sind Versionen von jqGrid <= 4.7 frei, aber der Name "free jqGrid" bedeutet das Produkt, das ich entwickle. Es ist kompatibel zu 4.x-Versionen von jqGrid, hat aber viele neue Funktionen. – Oleg