我有一个ajax方法,它接收标记数组的id并执行一些处理以确保标记未被使用。然后我需要将HTML发送回客户端,以便使用JavaScript呈现标签。只需一个标签,通过调用Ajax方法呈现多个元素
$this->render('/Element/tag');
来自控制器,因为'render'生成的响应的主体将包含该元素的html。如何将我的标签数组转换为每个元素并将其发送回客户端?
我有一个ajax方法,它接收标记数组的id并执行一些处理以确保标记未被使用。然后我需要将HTML发送回客户端,以便使用JavaScript呈现标签。只需一个标签,通过调用Ajax方法呈现多个元素
$this->render('/Element/tag');
来自控制器,因为'render'生成的响应的主体将包含该元素的html。如何将我的标签数组转换为每个元素并将其发送回客户端?
您只能调用render
一次 - 将其视为您希望在Controller代码末尾使用哪个“视图”。
如果您需要呈现多个标记的视图,则可以定义一个新视图,例如/src/Template/Tags/tags.ctp
。
你可以通过任何你想给你的视图(Tags/tags.ctp
文件),包括标签的数组:
$tags = ['Tag 1', 'Tag 2'];
$this->set('tags', $tags);
$this->render('Tags/tags');
然后tags.ctp
内,使用标签元素,从而使得各一个:
<?php foreach ($tags as $tag) {
echo $this->element('tags', [
"tag" => $tag
]);
}
根据[在另一个问题上的这个答案](http://stackoverflow.com/a/16092328/7100404)我不应该发回像这样的HTML,应该只发送数据并在javascript中构建我的元素。但是,有什么好的元素模板呢?我如何在这个用例中利用这个模板? – pjenk213
我通常不同意这种观点,它可以减少通过CakePHP呈现HTML的目的(为什么不用JavaScript构建整个应用程序,并在JSON中直接发送所有内容?)。这是一种有效但不同的做事方式。 CakePHP也可以使用[view routing](https://book.cakephp.org/3.0/en/development/routing.html#routing-file-extensions)来允许相同的端点有时提供HTML,而JSON数据可以在其他时间。 – ahoffner