CakePHP 2.2:预填充 AJAX“更新”div?

Posted

技术标签:

【中文标题】CakePHP 2.2:预填充 AJAX“更新”div?【英文标题】:CakePHP 2.2: Pre-populate AJAX "update" div? 【发布时间】:2012-08-20 18:48:44 【问题描述】:

这个问题有点n00b-ish,但我无法在 Cakephp 文档或通过谷歌找到令人满意的解决方案。

我正在尝试制作一个简单的 AJAX 表单,它将更新数据库中的一些信息,并在页面上显示该信息。整个过程看起来很简单,只是我不知道如何预填充更新 div。

在我的视图代码中,我有

<div id="interestingContent"></div>
<?
  echo $this->Form->create();
  // create form fields here
  echo $this->Js->submit('Save', array('update'=>'#interestingContent');
  echo $this->Form-end();
  echo $this->Js->writeBuffer();
?>

这很好用,当表单提交时,我的控制器会正确调用

$this->render('ajaxview','ajax')

并适当地更新#interestingContent div。

那么,问题是:从数据库中预填充#interestingContent 的最佳方法是什么?当然,我可以在 #interestingContent 中重复 ajaxview.ctp 中的代码,但似乎必须有一种 DRY 方法。

我的第一个想法是让ajaxview.ctp 成为一个元素,因为我基本上是在尝试将一个视图嵌入到另一个视图中。不过,这对我来说似乎很骇人听闻,因为我的控制器将直接渲染元素的视图。我也考虑了 2.1/2.2 中的新视图块,但这似乎也不对。

我敢肯定这种事情总是会出现。有没有普遍接受的方法来做到这一点?

【问题讨论】:

【参考方案1】:

我遇到了同样的问题。这可能有点骇人听闻,但使用一个元素就可以完成这项工作。 首先,创建一个元素来表示您的 bd 内容。 在您的表单视图中,您使用该元素。 然后创建另一个仅包含元素的视图。此视图将是对您的 ajax 请求的响应。通过使用元素,您可以防止代码重复。

【讨论】:

我得出了同样的结论。我刚刚在 AJAX 提交上做了$this-&gt;render('/Elements/Controllername/ajaxview');,它确实有预期的结果。哎呀,也许这甚至是您“应该”这样做的方式,但我还没有看到任何使用此类元素的文档。 CakePHP 是对 ajax 开放的,但是我完全同意的官方文档中没有很多关于它的文档。但是对于您的问题,我真的认为元素就是方式,因为无论是否使用 ajax,您都有两个包含相同内容的视图,并且一个元素会阻止您复制代码。

以上是关于CakePHP 2.2:预填充 AJAX“更新”div?的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP ajax 表单更新复制页面

cakephp - ajax 请求和操作“编辑”不能同时工作

使用 AJAX 预填充 Select2 - “未找到结果”

select2 4.0 AJAX 预填充如何?

如何格式化基于 ajax 的 Select2 预填充?

CakePHP:用户编辑后更新所有表?