0

こんにちは、このプラグインでユーザー メッセージ ページを作成しました。グリッドには、ユーザーの受信ボックスとユーザーの送信ボックス (送信済み) メッセージが表示されます。ここに小さなコードがあります:

    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 パラメータを上書きしません。

寛大な提案はありますか?

4

2 に答える 2

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")だけで済みます。

于 2010-09-26T10:12:46.853 に答える
0

笑、だから私はそれらのばかげた間違いの 1 つを犯しました...元のメッセージで私は「// ダイアログ フォームが何でも編集しています...」と言います。私は間違いを犯しました。私が持っていたものは次のとおりです。

}).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

ただし、オーバーレイを見たときにハックで問題を修正した後、false が機能せず、検索用の jQuery UI オーバーレイがまだあることに気付きました...

私がしたことは、いつかこれを読んだ人に何らかの形で役立つかもしれないので、私がしたことは次のとおりです。

Unix タイムスタンプ (POSIX) である get パラメータ nd がありますが、php や mysql、ほとんどの UNIX のもの (秒単位) とは異なり、ミリ秒単位 (JavaScript の実装) です。また、最後にクリックされたナビゲーション リンクのタイムスタンプも送信しました。

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
于 2010-09-26T04:51:06.357 に答える