我有一個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