У меня был сценарий, похожий на ваш, и я нашел несколько методов для Javascript , которые применимы. Я использовал codeBlock()
, чтобы обернуть кусок javascript, и event()
, чтобы связать событие click, но я не уверен, насколько это понятнее, чем просто писать необработанный Javascript.
Я обнаружил, что раздел AJAX руководства CakePHP действительно полезен для получения базовой настройки. Затем я взял сгенерированный Javascript и сделал его более динамичным.
В этом примере я вызываю действие add_topic
всякий раз, когда пользователь нажимает на ссылку. Каждый раз, когда он вызывается, я увеличиваю переменную topicIndex и передаю ее в качестве параметра в вызове AJAX. Вызов AJAX возвращает несколько строк, вставленных в таблицу над ссылкой, по которой щелкнул пользователь.
<tr id="add_topic_row"><td colspan="3">
<a id="add_topic_link" href="javascript:void(0);">New Topic
<?php echo $html->image('icons/add32.png');?></a></td></tr>
</table>
</fieldset>
<?php
echo $form->end('Submit');
$addTopicUrl = $html->url(array('action' => 'add_topic')) . '/';
$script = <<<EOS
var topicIndex = $index;
var addTopicUrl = '$addTopicUrl';
addTopic = function()
{
new Ajax.Updater(
'add_topic_row',
addTopicUrl + topicIndex,
{
asynchronous:true,
evalScripts:true,
insertion:Insertion.Before,
requestHeaders:['X-Update', 'add_topic']
});
topicIndex++;
}
EOS;
echo $javascript->codeBlock($script);
echo $javascript->event('add_topic_link', 'click', 'addTopic();')
?>