1

次のような列の 1 つにボタンがあるグリッドがあります。ボタンがクリックされたときにリスターまたは新しいグリッドを表示するにはどうすればよいですか?

   $grid=$page->add('Grid');
        $grid->setModel('Tickets',array('subject','date','time','department','status','text'));
        $grid->addColumn("button",'read_ticket_id','Read');

        if($_GET['read_ticket_id']){
            // this generates javascript to be executed on buttion click
       //how can I show a lister or a new grid when the button clicked?
        }
4

2 に答える 2

1

ATK4 Codepad で例を確認してください。 http://agiletoolkit.org/codepad/gui/grid

編集: これは私のページの 1 つのスニペットです。多分あなたはそれが便利だと思うかもしれません。この背後にある考え方は、この IF ステートメント内で実際に JavaScript を生成し、JavaScript がブラウザに送り返され、別のリクエスト (既存のオブジェクトのリロード、新規作成、どこかにリダイレクトなど) を行うことができるというものです。

...
if($_GET['ticket']){
    // Join this report with selected ticket
    $this->grid->model->addToTicket($_GET['ticket']);
    // Reload
    $this->js(null,array(
        $x->js()->reload(),
        $this->js()->univ()->successMessage('Successfully saved')
    ))->execute();
}
...

$_GET['ticket'] を使用すると、「チケットに追加」ボタンをクリックしたグリッド内のレコードの ID を取得できます。$x は、フォーム、フィールド、タブ、その他のグリッドなど、このページの他のオブジェクトです。$this->grid->model を使用すると、このグリッドに関連付けられたモデルへの参照を取得できます。そのモデルでは、データベースで何かを行う addToTicket というカスタム アクション/メソッドが定義されています。

$this->js()->redirect() または $this->js()->location() などを使用して他のページにリダイレクトすることもできます。基本的には何でもできますが、これらすべてを生成する必要があります結果としての JavaScript、または次に何をすべきかをブラウザに指示します。

最後に ->execute() を追加することを忘れないでください! これにより、ページの解析が停止し、すぐに JS 応答が生成されます。

于 2012-10-19T21:01:11.827 に答える