#javascript #php #html #laravel #laravel-blade
#javascript #php #HTML #laravel #laravel-блейд
Вопрос:
Я использую Laravel, и я пытаюсь использовать javascript для заполнения списка пользователей. Проблема в том, что каждая запись списка основана на представлении, которое я создал в блейд-компоненте:
pro_list_entry.blade.php:
@if( isset($pro_id) amp;amp; isset($pro_avatar) amp;amp; isset($pro_name))
<a onclick='selectProfessional( {{ $pro_id }} , {{ $pro_avatar }}, {{ $pro_name }} )' style='cursor: pointer'>
<div class='row'>
<div class='col-4'>
<img class='u-avatar rounded-circle' src='{{ $pro_avatar }}'>
</div>
<div class='col-8 d-flex align-items-center'>
<h6 class='fm-wrapped-text'>{{ $pro_name }}</h6>
</div>
</div>
</a>
@endisset
Затем я хотел бы добавить все эти компоненты в список, используя Javascript:
var listOfPhysicians = buildProfessionalListFromData(jsonData.professionals);
$('#pc_new_app_med_list').empty();
$('#pc_new_app_med_list').html(listOfPhysicians);
…
function buildProfessionalListFromData(data) {
var list = "";
if (data != null) {
for (i = 0; i < data.length; i ) {
var entry =
"@component('patrons.clinic.shared.pro_list_entry')"
"@slot('pro_id')" data[i].professional_id "@endslot"
"@slot('pro_avatar') ../../user_uploads/avatars/" data[i].avatar "@endslot"
"@slot('pro_name')" data[i].prefix " " data[i].first_name " " data[i].last_name "@endslot"
"@endcomponent";
list = list entry;
}
}
return list;
}
После небольшого исследования я обнаружил, что то, что я пытаюсь сделать, просто невозможно.
Есть ли какой-либо другой способ сделать это? Добавление элементов списка, основанных на представлении, и заполнение их данными с помощью javascript? Возможно, я просто не вижу очевидного решения.
Любая помощь?
Спасибо.
Комментарии:
1. Вы не можете сделать это с помощью блейд-компонента. Блейд-компоненты отображаются на сервере в формате HTML, вы пытаетесь использовать манипуляции с dom на стороне клиента для добавления отображаемого на стороне сервера кода на свою страницу, это никогда не сработает.
2. @Joe Да. Я знаю, что: ( Как я уже сказал, «Я обнаружил, что то, что я пытаюсь сделать, просто невозможно». Однако мне все еще нужно решить проблему. Есть альтернативы?
3. Для этого я бы предложил использовать что-то вроде vue.js (или angular, или react). Откуда вы беретесь
jsonData.professionals
? Это что-то, что пользователь загрузил?4. Нет. Я удаляю его с помощью Ajax-вызова на сервер (на PHP), который, в свою очередь, извлекает и формирует данные из базы данных.
Ответ №1:
Вы можете написать свой блейд как обычно, как обычный, и отобразить его с помощью render()
функции.
В вашем методе контроллера
function foo()
{
$yourView= SELF::returnYourView();
return json_encode(['yourView' => $yourView]);
}
functionv returnYourView()
{
return view('yourview')->render();
}
В вашем jquery
$('your-parent-dev').html(response.yourview);
Комментарии:
1. Это хорошая идея, но не для этого случая в частности. Видите ли, я хочу, чтобы контроллер возвращал только данные, а не представления, поскольку этот запрос используется и для других целей. Но спасибо вам за предложение.
2. В итоге я использовал эту концепцию. Это, безусловно, лучший способ решить эту проблему. Спасибо.