4

我通过操作有一个页面search,用户可以在其中指定一些选项来显示数据行。这个过程需要几秒钟,因为需要相当多的后端逻辑。在返回的数据上,用户可以通过操作将一行数据添加到另一个表中以add_data供将来参考。

请注意,搜索结果数据保存在一个表中,以便我在用户决定保存该行时随时可用(搜索结果是来自多个数据库的数据的汇编)。操作之后add_data,我希望能够search使用搜索结果维护视图,而不是让浏览器转到add_data视图并返回到引用者,那里不会有搜索结果。

现在,我知道我可以检查保存搜索结果并将其加载到search视图中的该表,但我想知道是否可以在不咨询数据库的情况下在保持当前操作视图完整的同时运行另一个操作. 据我所知,$this->redirect(...)由于搜索结果页面的 URL 缺少任何参数(例如mycontroller/search),因此没有任何效果。

我添加了一个按钮,使用以下代码添加用户所需的数据:

echo $this->Html->link('+', array('action' => 'add_data', $reference_id));    // + button is created

有没有办法做到这一点?最好使用最少的 Javascript。

4

2 回答 2

2

按照此处的步骤为您的蛋糕项目添加 ajax 支持。

然后,在呈现搜索视图的控制器中启用 ajax 助手:

$this->helpers('Ajax');

您应该能够像这样呈现您的链接,它不会引导用户离开搜索页面:

<?php echo $this->Ajax->link(
  '+', 
  array('action' => 'add_data', $reference_id),
  array('update' => 'my-div')
); 
?>
<div id='my-div'></div>

由于您希望用户能够向该操作发送数据,因此您可能希望考虑发布表单而不仅仅是链接。Ajax 助手还提供了通过 Ajax 提交表单的能力:

echo $form->create();
echo $form->input('field1');
echo $form->input('field2');
echo $ajax->submit('Submit', array(
   'url'=> array('controller'=>'mycontroller', 'action'=>'add_data'),
   'update' => 'my-div'

));
echo $form->end();

在你的控制器中......

function add_data() {
  // ... do something
  $this->layout = 'ajax';
  $this->set('message', 'Your message here!');
}

在 add_data 视图中......

<?php echo $message; ?>
于 2013-03-22T16:06:04.307 回答
0

我相信您正在寻找 View::render 方法。

<?php

...
function addData(...) {
    ...
    ...

    $this->render('search'); // Render the search view instead of the "add_data" view.
}
...

?>

或者可能

<?php

...
function search(...) {
    ...
    ...

    if (<criteria)
        $this->addData(...); // Move to another action while keeping the current view in tact.
}
...
function addData(...) {
    if (<criteriaForSearchView>)
        $this->render('search');
    // Else render the "add_data" view.
}
...

?>

让我知道这是否有帮助!谢谢!

于 2013-03-25T21:58:18.983 回答