2017-02-03 84 views
0

我有一個ajax方法,它接收標記數組的id並執行一些處理以確保標記未被使用。然後我需要將HTML發送回客戶端,以便使用JavaScript呈現標籤。只需一個標籤,通過調用Ajax方法呈現多個元素

$this->render('/Element/tag'); 

來自控制器,因爲'render'生成的響應的主體將包含該元素的html。如何將我的標籤數組轉換爲每個元素並將其發送回客戶端?

+0

根據[在另一個問題上的這個答案](http://stackoverflow.com/a/16092328/7100404)我不應該發回像這樣的HTML,應該只發送數據並在javascript中構建我的元素。但是,有什麼好的元素模板呢?我如何在這個用例中利用這個模板? – pjenk213

+0

我通常不同意這種觀點,它可以減少通過CakePHP呈現HTML的目的(爲什麼不用JavaScript構建整個應用程序,並在JSON中直接發送所有內容?)。這是一種有效但不同的做事方式。 CakePHP也可以使用[view routing](https://book.cakephp.org/3.0/en/development/routing.html#routing-file-extensions)來允許相同的端點有時提供HTML,而JSON數據可以在其他時間。 – ahoffner

回答

0

您只能調用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 
    ]); 
} 
+0

這與[這個答案](http://stackoverflow.com/a/4405533/7100404)是一樣的,雖然它可以工作,但它不是非常乾燥。有沒有一種解決方案是DRYer? – pjenk213

+0

元素的全部重點是定義可重複使用的HTML的短位,您可以將其插入到視圖中..它們是繼續從多個視圖訪問代碼的重複工具,非常乾燥的原則。這個「重複」你想避免的部分是什麼? – ahoffner

+0

我現在有一個渲染單個標籤和另一個渲染多個標籤的元素。我希望能夠將數據發送回像多個標籤的render(),並使用一個'tag'元素。 – pjenk213