2015-09-21 3 views
0

Lorsque vous essayez d'utiliser la fonction de recherche de l'exemple SlickGrid 4 (https://github.com/mleibman/SlickGrid/blob/gh-pages/examples/example4-model.html), dans une grille modifiée avec des données personnalisées, l'affichage dataView ne change pas lorsque vous tapez dans la zone de recherche.Qu'est-ce qui empêche ce filtre de recherche de mettre à jour l'affichage?

Ce qui suit semble fonctionner:

  • Les mises à jour de variables searchString correctement dans myFilter() lorsque frappe dans la zone de recherche, et les éléments de la colonne correcte sont passés. MyFilter() montre à définir lors de son passage dans le DataView.

Notes:

  • si un élément est sélectionné, la sélection passe au premier point de la grille qui est décochée lors de la saisie si le texte ne correspond pas à l'élément sélectionné initialement

  • le filtre a été modifié de manière à ne pas être filtrés par percentCompleteThreshold

Ce problème est-il lié à la portée des composants?

Veuillez noter si quelque chose d'autre a besoin d'être posté.

La ligne de départ de chaque composant de recherche et fonction d'enrubannage est indiquée ci-dessous.

<span style="float:right" class="ui-icon ui-icon-search" title="Toggle search panel" 
           onclick="toggleFilterRow()"></span> 

<div id="inlineFilterPanel" style="display:none;background:#dddddd;padding:3px;color:black;"> 
    Search: <input type="text" id="txtSearch2"> 
    <div style="width:100px;display:inline-block;"></div> 
</div> 


// line #'s paired with each search component 

// 361: 
<script type="text/javascript"> // encapsulates all 

// 901: var dataView; 

// 1062: 
var searchString = ""; 

// 1348: 
function myFilter(item, args) { 

    if (args.searchString != "" && item["file_name"].indexOf(args.searchString) == -1) { 
    return false; 
    } 

    return true; 
} 


// 1379: 
    function toggleFilterRow() { 
     grid.setTopPanelVisibility(!grid.getOptions().showTopPanel); 
     } 

// 1632: 
jQuery(document).ready(function() { … // ends at line 2556 


// 1841: getJSON call 
// 2000: grid is created and its data retrieved 
grid = new Slick.Grid("#myGrid", data, columns, options); 

// 2029: 
dataView = new Slick.Data.DataView({ inlineFilters: true }); 

// 2035: 
// move the filter panel defined in a hidden div into grid top panel 
$("#inlineFilterPanel") 
    .appendTo(grid.getTopPanel()) 
    .show(); 

// 2462: 
$("#txtSearch2").keyup(function (e) { 
     Slick.GlobalEditorLock.cancelCurrentEdit(); 

     // clear on Esc 
     if (e.which == 27) { 
      this.value = ""; 
     } 

     searchString = this.value; 
     updateFilter(); 
     }); 
     $("#txtSearch2").click(function (e) { 
      inSearchBox = true; 
     }); 

     function updateFilter() { 
     dataView.setFilterArgs({ 
      searchString: searchString 
     }); 
     dataView.refresh(); 

     } 


// 2502: 
dataView.beginUpdate(); 
dataView.setItems(data); 

dataView.setFilterArgs({ 
      searchString: searchString 
     }); 
dataView.setFilter(myFilter); 
dataView.endUpdate(); 


    }); // 2517: ends getJSON call 

}); // 2556: ends jQuery(document).ready call 
+1

Vous n'obtenez pas beaucoup de réponse, êtes-vous! Vous feriez mieux de poster l'exemple entier en jsfiddle, ou même en tant que lien vers un fichier sur votre site web. Une fois que je peux l'exécuter sur ma machine locale, je peux utiliser beaucoup d'outils de diagnostic plutôt que de me pencher sur le code. –

+0

Je n'ai pas utilisé jsfiddle, mais comme il y a des composants d'interface utilisateur externes, je peux voir si cela vaut la peine d'essayer de publier un exemple dépouillé. Comme il semble que le code backend puisse m'avoir perdu pendant un moment, j'ai édité ce post avec "Notes", qui peut être plus éclairant pour vous que moi. – Phillip

Répondre

0

Le DATAVIEW ne soit pas mis à jour parce que « données » est passé dans l'appel d'initialisation de la grille au lieu d'DATAVIEW.