Заявка
В PHP я выведу некоторые начальные представления, чтобы сканеры веб-страниц могли очистить мой сайт:
----------------
| cool view 1 |
----------------
| cool view 2 |
----------------
| cool view 3 |
----------------
| Load more |
----------------
Javascript также должен динамически генерировать те же представления. Когда пользователь нажимает кнопку «загрузить еще», он выполняет AJAX на сервере и прикрепляет результат к странице:
----------------
| cool view 1 |
----------------
| cool view 2 |
----------------
| cool view 3 |
----------------
| cool view 4 |
----------------
| cool view 5 |
----------------
| cool view 6 |
----------------
| Load more |
----------------
Текущая реализация
В настоящее время мои представления PHP и представления JS написаны отдельно. Вот пример загрузки гипотетического представления PHP с использованием CodeIgniter framework.
view.php
<?php
<div>
<span>cool view</span>
<span><?=$id?></span>
</div>
?>
controller.php
$this->load->view(
'view',
array('id' => '999')
);
А вот пример AJAX для загрузки гипотетических представлений с помощью Prototype framework.
ajax.php
echo json_encode(
array('id' => random())
);
view.js
MyView = Class.create({
initialize: function(id) {
var div = new Element('div');
var span0 = new Element('span').update('cool view');
var span1 = new Element('span').update(id);
div.appendChild(span0);
div.appendChild(span1);
return div;
}
});
controller.js
new Ajax.Request(
'/index.php/someController/someMethod', {
onSuccess: function(transport) {
var response = transport.responseText.evalJSON();
$('viewsContainer').appendChild(
new MyView(response.id)
)
}
}
);
Нужен более чистый раствор
Мне нужен способ поделиться шаблоном HTML в PHP и JS без переписывания всего. В моем реальном проекте у меня десятки просмотров. Дублирование кода представления в PHP и JS, кажется, трудно поддерживать. Я не пошел с дешевым маршрутом PHP, печатающим прямой HTML в AJAX, потому что 1) есть дополнительные издержки по размеру для включения тегов HTML, 2) это не зависит от клиента - то есть клиент без браузера не сможет понять вывод и 3) он не позволяет JS аккуратно присоединять слушателей к подпредставлениям в представлении.