【问题标题】:Need to override Search Filter url param (_search) in jgrid the jquery plugin?需要在 jquery 插件的 jgrid 中覆盖搜索过滤器 url 参数(_search)?
【发布时间】:2010-09-26 02:06:43
【问题描述】:

您好,我已经使用此插件创建了一个用户消息页面。 网格将显示用户收件箱和用户发件箱(已发送)消息。这是一个小代码:

    jQuery(document).ready(function() {

       //...some stuff
       currentURL = function() {

            return 'json_member_mail.php?task='+ currentBox;
                    //where current box is either inbox or outbox
       }

       //... alot of stuff

       myGrid = jQuery("#list").jqGrid({

        url:currentURL(),
        datatype: 'json',
        mtype: 'GET',

        //      even more stuff  ....

       }).jqGrid('navGrid','#pager', 
        { 
                        the lil stuff....

            search:true,

                        //the dialog...
                 }

         // the dialog form editing whatever...

   );//grid


});//document.ready

所以当用户点击发件箱时会发生这样的事情:

jQuery("#list").jqGrid('setGridParam',{ url:currentURL(), postData:{lrt:lastReloadTime} }).trigger("reloadGrid"); //where current URL has the GET param task=outbox

在我使用搜索过滤器之前,一切都很好。例如,我搜索用户“foo”发送的消息,一切都很好,但是当我点击发件箱时,它仍会尝试显示用户“foo”发送的消息,但我希望重置搜索过滤器。

我尝试在准备好的文档上加载搜索对话框并立即关闭它以获取 filter().reset 和所有这些,但它不起作用:the-built-in-search-filter-box

myGrid.trigger('reloadGrid');也有同样的行为

.jqGrid('setGridParam',{    url:currentURL(), postData:{_search:'false'} }).trigger("reloadGrid"); 

可以解决我的问题,但不会覆盖 _search 参数。

有什么好的建议吗?

【问题讨论】:

    标签: javascript jquery jqgrid jqgrid-asp.net jqgrid-php


    【解决方案1】:

    我建议您不要使用函数调用作为url 参数的值。在网格初始化期间,参数的值将只计算一次。取而代之的是,您可以使用

    url: 'json_member_mail.php',
    postData: {
        task: function() {/* return currentBox based on criterias which you have */},
        lrt: lastReloadTime
    }
    

    如果需要,您可以将属性 lrt 也作为函数。

    如果postData 的某些属性是函数该函数将在任何ajax 请求上调用。因此,您可以在搜索、分页、排序或页面重新加载时使用currentBox真正实际 值。

    如果您需要重新加载 jqGrid,您将不再需要更改 urlpostData,您只需调用 trigger("reloadGrid")

    【讨论】:

      【解决方案2】:

      大声笑,所以我犯了一个愚蠢的错误...... 在原始消息中我说“//对话框表单正在编辑任何内容......”我犯了一个错误 是的,我什至懒得在这里写那部分,所以我所拥有的是:

      }).jqGrid('navGrid','#pager', 
              { 
                  edit:false,
                  add:false,
                  del:false,
                  search: true,
                  refresh:true,
                  refreshtext:"Refresh",
                  searchtext:"Search"
              },
              {},//add 
              {}, //edit
              {}, //delete
                  {},  <---instead of putting search options on this line
              {        <----I was putting it here on this line
                  overlay:false,
                  closeOnEscape:true,
                              afterShowSearch:... , 
              } /* allow the view dialog to be closed when user press ESC key*/
          );//grid
      

      但是我意识到,在我用 hack 解决了我的问题后,当我看到 overlay:false 不起作用并且仍然有一个用于搜索的 jQuery UI 覆盖...

      我所做的可能会对有一天读到这篇文章的人有所帮助,所以我所做的是:

      有一个 get 参数 nd,它是一个 Unix Timestamp(POSIX),但以毫秒为单位(javascripts 实现),这与 php 和 mysql 以及大多数 unix 的东西(以秒为单位)不同。我还发送了最后一次点击任何导航链接的时间戳:

      lastReloadTime = new Date().getTime() ;
      jQuery("#list").jqGrid('setGridParam',{ 
              url:currentURL(), 
              postData:{lrt:lastReloadTime
      } 
      

      然后在我的生成 json 数据的 php 文件中:

      $searchOK = 1;
      
      if($_GET['_search']=='true') {
      
          if( isset($_GET['lrt']) ){ 
      
          //so here I check to see if the main mail links have been clicked at all
          //from the time of the first page load 
          //if not then its all good but if it has check for the time
      
              if(   (    ($_GET['nd']/1000)-($_GET['lrt']/1000)    ) < 1) $searchOK=0;
          }
      
          if($searchOK){ //you can do search since it might be going through pages of a search result
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-02-19
        • 2012-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多