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->render('/Elements/Controllername/ajaxview');
,它确实有预期的结果。哎呀,也许这甚至是您“应该”这样做的方式,但我还没有看到任何使用此类元素的文档。
CakePHP 是对 ajax 开放的,但是我完全同意的官方文档中没有很多关于它的文档。但是对于您的问题,我真的认为元素就是方式,因为无论是否使用 ajax,您都有两个包含相同内容的视图,并且一个元素会阻止您复制代码。以上是关于CakePHP 2.2:预填充 AJAX“更新”div?的主要内容,如果未能解决你的问题,请参考以下文章