2017-06-07 1 views
0

Je dois permuter entre les actions basées sur une condition donnée dans une grille jqGrid 4.4.1. Jetez un oeil à l'image suivante:Actions conditionnelles entre les lignes en fonction d'une condition donnée dans jQgrid?

enter image description here

Comment ça devrait fonctionner est:

  • si le type est api_response alors le actions ne devrait être que l'icône de loupe.
  • si Type est api_request alors le actions devrait être la deuxième icône mais la loupe ne devrait pas être là.

Voilà comment je suis en train de créer les boutons:

$.fn.fmatter.btnFormatter = function (cellValue, options, rowData, addOrEdit) { 
    return '<a href="#">' + 
     '<img class="api_button" data-id="' + options.rowId + '" src="/images/icons/16x16/document_view.png" alt="Show API Response Data" title="Show API Response Data" />' + 
     '</a>' + 
     '<a href="/sf/api-logs/error/' + options.rowId + '">' + 
     '<img class="error_button" data-id="' + options.rowId + '" src="/images/icons/16x16/document_warning.png" alt="Show Errors" title="Show Errors" />' + 
     '</a>'; 
}; 

$(function() { 
    $("#grid").jqGrid({ 
     url: '/api-logs', 
     datatype: "json", 
     colNames: $('#colnames').data('values'), 
     colModel: $('#colmodel').data('values'), 
     width: 980, 
     height: 300, 
     pager: "#gridpager", 
     toppager: true, 
     hoverrows: true, 
     shrinkToFit: true, 
     autowidth: true, 
     rownumbers: true, 
     viewrecords: true, 
     rowList: [10, 20, 50, 100], 
     data: [], 
     rownumWidth: 50, 
     gridview: true, 
     sortable: true, 
     rowattr: function (item) { 
      if (item.type === "api_response") { 
       return {"class": "api_response"}; 
      } else if (item.type === 'api_request') { 
       return {"class": "api_request"}; 
      } 
     }, 
     jsonReader: { 
      root: 'rows', 
      page: 'page', 
      total: 'total', 
      records: 'records', 
      cell: '', 
      repeatitems: false 
     } 
    }); 
}); 

Bien sûr, la première colonne a la btnFormatter appliquée.

Comment puis-je faire cela?

+0

Comment créer une icône de loupe? Vous devriez publier du code JavaScript, que vous utilisez. L'ancien jqGrid 4.4.1 n'a pas la possibilité de créer un bouton d'action personnalisé. De plus, jqGrid 4.4.1 a presque 5 ans. C'est la version morte, qui n'est pas supportée depuis des années. – Oleg

+0

[Free jqGrid] (https://github.com/free-jqgrid/jqGrid) (la version actuelle est 4.14.1) prend en charge les boutons personnalisés, qui peuvent être affichés conditionnellement en fonction des données d'entrée. Il faut définir le callback 'actionsNavOptions.isDisplayButtons'. Voir [la démo] (http://www.ok-soft-gmbh.com/jqGrid/OK/CustomActionButton1.htm) créé pour [la réponse] (https://stackoverflow.com/a/29735149/315935) pour plus de détails. – Oleg

+0

@Oleg J'ai ajouté le code à l'OP mais je ne peux pas mettre à jour la bibliothèque maintenant parce qu'il y a tout un système qui fonctionne sur cette version et je ne sais pas comment se comportera la BC. – ReynierPM

Répondre

1

Vous pouvez modifier le code de $.fn.fmatter.btnFormatter, que vous utilisez pour tester rowData.type de la même manière que vous le faites dans le rappel rowattr.

De toute façon, je vous recommande strictement de tester, si votre code existant fonctionne avec la version actuelle de jqGrid libre (la version 4.14.1). Vous pouvez modifier 3 lignes de votre code HTML et charger des fichiers CSS et JS à partir de CDN (voir the wiki article). La version 4.4.1 de jqGrid est morte. Il est vraiment dangereux d'utiliser une version aussi ancienne et non supportée.