Estoy buscando las mejores prácticas para ordenar una lista en la interfaz usando ajax.
Así que tengo un componente que recorre todos los elementos. Luego, una barra lateral con casillas de verificación para filtrar usando Ajax. Cada casilla de verificación será una categoría y vivirá un filtro al marcar ese filtro.
En mi componente default.htm, tengo
{% set items = __SELF__.items %} <div class="col-md-12" id="results"> {% for item in items %} <ul> <li>{{ item.title }} - {{ item.description }}</li> </ul> {% endfor %} </div>y un botón hasta que funcione para cambiar a casillas de verificación.
<button class="btn btn-default" data-request="onHandleForm" data-request-update="#results"> Goy en mi archivo de complemento de componentes
// Fetches everything public function onRun() { $order = items::orderBy('id', 'asc'); $this->items = $order->get(); } function onHandleForm() { // Fetch all of the items where category is 2 for test purposes $order = items::orderBy('id', 'desc')->where('category','2'); $filter = $order->get(); $this->page['items'] = $filter; }Sin embargo, tengo problemas con la parte que no se encuentra. Lo anterior es bastante descuidado, pero solo estoy buscando la mejor manera de actualizar el contenido (¿usar múltiples parciales para actualizar o solo un div?) Y también estoy tratando con el alcance.
Sé sobre la actualización parcial, pero necesito un ejemplo de trabajo para aprender. No conozco las mejores prácticas para el alcance en un componente, si esto afectará o no la paginación y cómo estructurar la configuración con múltiples parciales en un componente.
Si desea extraer las actualizaciones parciales del controlador, el nombre del atributo debe ser
data-request-update="resultsPartialName: '#results'"Puedes usar múltiples parciales también así:
data-request-update="firstpartial: '#myDiv', secondpartial: '#otherDiv'"La otra forma de hacerlo es enviar las actualizaciones parciales desde el controlador ajax. Esto me parece un poco más limpio, pero es solo una cuestión de preferencia.
function onRefreshTime() { return [ '#myDiv' => $this->renderPartial('mypartial') ]; }Más info en la página de Actualización de parciales de la documentación oficial.
Cambie a default.htm si default.htm está en una carpeta, luego reemplace data-request-update="foldername/default:'#results'"
<form data-request="{{ __SELF__ }}::onFormSubmit" data-request-validate> <button class="btn btn-default" data-request="onHandleForm" data-request-update="default:'#results'"> </form>