2017-08-20 1 views
1

J'essaie d'utiliser info_dialog sur mon jqGrid, mais voir TypeError: $(...).jqGrid.info_dialog is not a function dans la console.jqGrid.info_dialog n'est pas une fonction, dois-je appeler étendre?

Je n'ai pas (!) Défini ma propre fonction info_dialog. Mais je peux en voir un dans $.extend($.jgrid, ... comme here, donc je m'attendais à ce qu'il soit disponible par défaut.

info_dialog : function(caption, content,c_b, modalopt) { 
     var mopt = { 
      width:290, 
      height:'auto', 

Dois-je en quelque sorte l'activer pour la grille? Ou quoi d'autre dois-je faire si je peux utiliser la version définie here (appel extend sur ma grille? ..)

L'utilisation 4.6.0 de https://cdnjs.com/libraries/jqgrid
Maintenant, en utilisant https://cdnjs.com/libraries/free-jqgrid 4.14.1

+0

Quelle version de jqGrid vous utilisez (pouvez utiliser) et de quelle fourche de jqGrid ([free jqGrid] (https://github.com/free-jqgrid/jqGrid), commercial [Guriddo jqGrid JS] (http://guriddo.net/?page_id=103334) ou un ancien jqGrid en version <= 4.7). De plus, il est important de voir ** comment vous appelez 'info_dialog' dans votre code **. Selon la version de jqGrid, que vous utilisez, vous pouvez initialiser 'this' correctement comme' $ .jgrid.info_dialog.call ($ ("# grid") [0], ...) '. – Oleg

Répondre

1

jqGrid définit non seulement les méthodes "standard", qui peuvent être utilisées comme $("#grid").jqGrid("methodName", ...) ou $("#grid").methodName(...), mais aussi d'autres méthodes. Les méthodes "standard" seront enregistrées sous $.fn.jqGrid.methodName (comme $.fn.jqGrid.editGridRow fonction par exemple) et, si aucun $.jgrid.no_legacy_api = true; est spécifié avant $.jgrid.no_legacy_api = true;, alors sous $.fn.methodName aussi. En d'autres termes, il n'existe que l'objet global $.fn.jqGrid ou $.fn, qui contient les méthodes jqGrid "standard". Une autre liste de méthodes sera enregistrée sous $.jgrid au lieu de $.fn.jqGrid ou $.fn. info_dialog est un exemple d'une telle méthode. Ainsi, il faut utiliser $.jgrid.info_dialog, $.jgrid.jqID, $.jgrid.htmlEncode, $.jgrid.randId et ainsi de suite pour utiliser ces méthodes. La plupart des méthodes ne nécessitent pas d'initialiser this (comme $.jgrid.randId()$.jgrid.jqID("some.text")), mais certaines méthodes nécessitent que this soit initialisé à DOM de la grille (<table> vide utilisé pour générer la grille).

Par exemple, vous pouvez utiliser

$grid.jqGrid("navButtonAdd", "#pager", { 
    caption: "Test", 
    onClickButton: function() { 
     $.jgrid.info_dialog.call(this, 
      "Warning with two buttons", 
      "Click the `test` button", 
      "Close", 
      { 
       buttons: [ 
        { 
         text: "\"text\" button", 
         id: "buttid", 
         onClick: function() { 
          alert("click..."); 
         } 
        } 
       ] 
      } 
     ); 
    } 
}); 

Voir https://jsfiddle.net/OlegKi/xLrbdspo/. J'utilise dans la démo free jqGrid la fourche, que je développe, mais la même chose fonctionne avec la version rétro 4.6 de jqGrid, que vous utilisez.

La remarque finale. Si vous connaissez la syntaxe de TypeScript, que vous pouvez trouver dans free-jqgrid.d.ts réponses sur de nombreuses questions comme l'utilisation de info_dialog. Les méthodes et propriétés de $.jgrid sont décrites here (inclus info_dialog). Vous trouverez here en outre quelques méthodes $.fmatter, $.jqm, $.jqDnR et $.unformat qui sont la partie de jqGrid de la même manière comme $.jgrid.