jqgrid поиск / фильтр - PullRequest
       11

jqgrid поиск / фильтр

0 голосов
/ 28 апреля 2011

это связано с моим последним вопросом в этой ссылке . Я уже выяснил, в чем ошибка, почему он отображает «Ошибка сервера: Параметр dataType не указан». Это filter="[{'name':'main_account_group_code','comparison':'starts_with','value':$('#searchCode').val()}]";

до

filter=[{'name':'main_account_group_code','comparison':'starts_with','value':$('#searchCode').val()}];

Теперь моя сетка успешно отображает данные в поиске. У меня вопрос, есть ли другой способ сделать это без использования глобальной переменной? Мой старший сказал мне, что это плохая практика и попробовать что-то еще. У меня также есть ощущение, что есть еще один лучший способ отображения моих поисковых данных в jqgrid (вместо использования глобальных), но я просто не знаю, как это сделать.

Я уже несколько дней решаю эту проблему самостоятельно, но все же у меня все еще нет лучшего способа, как это сделать (все еще застрял). кто-нибудь помочь ..

EDIT: Это мой код jqgrid.

$("#list1").jqGrid({
    url: '',    
    datatype: 'local',      
    jsonReader : {              
        root: function(obj) {
            var root = [];

            if  ('error' in obj) 
            {
                showMessage(obj.error['class'] + ' error: ' + obj['error']['msg']);
            }
            else
            {
                $.each(obj['result']['main']['rowdata'], function(rowIndex, rowDataValue) {
                    var row = {};
                    $.each(rowDataValue, function(columnIndex, rowArrayValue) {
                      var fldName = obj['result']['main']['metadata']['fields'][columnIndex].name;    
                       row[fldName] = rowArrayValue;                  
                    });
                    root[rowIndex] = row;

                });
            };

            return root;
        },          
        page: "result.main.page",   
        total: "result.main.pageCount",     
        records: "result.main.rows",            
        repeatitems: false,                             
        id: "0"                                                     
    },
    colNames:['Code', 'Description','Type'],        
    colModel:[
        {name:'code'},
        {name:'desc'},
        {name:'type'}
    ],
    postData: {
      filters:[{"name":"main_account_group_code", "comparison":"starts_with", "value":$('#searchCode').val()}]
    },
    rowNum:10,                      
    viewrecords: true,
    rowList:[10,50,100],    
    pager: '#tblDataPager1',
    sortname: 'desc',   
    sortorder: 'desc',      
    loadonce:false, 
    height: 250,
caption: "Main Account"
});  

1 Ответ

1 голос
/ 28 апреля 2011

То, что вы используете в своем предыдущем вопросе, мне не нравится не из-за использования «глобальной» переменной filter, а из-за сложной логики. Особенно странным я считаю, что вы отказываетесь от многих параметров jqGrid внутри вашей реализации дескриптора события serializeGridData. Я уверен, что код может быть значительно упрощен, но вы не разместили более полный код JavaScript, который вы используете. Даже какой метод HTTP вы используете для связи с сервером (вы используете mtype:"POST" параметр или нет).

Теперь о вас главный вопрос. Переменная filter должна не быть глобальной. Если должно быть видно. Например:

$(document).ready(function () {
    var filter = ''; //this is NOT global variable
    $('#btnsearchCode').click(function(){
        filter="...any value..."; // you can change the value of filter here
        //...
        $('#list1').trigger('reloadGrid');
    });

    $('#list1').jqGrid({
        // define jqGrid where you can use filter if needed
        // either directly of inside of body of any function
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...