Estoy intentando construir un complemento TODO simple usando Backbone y me he encontrado con un problema con la API AJAX. Para recuperar la llamada AJAX correcta, debe pasar el parámetro "acción" de esta manera:
admin-ajax.php? action = get_todos
que funciona bien para el método GET en Backbone. Sin embargo, cuando use DELETE Backbone usará una URL como esta por defecto:
admin-ajax.php? action = get_todos / 9
donde "9" es la ID del trabajo que se está eliminando. Al agregar esta identificación, interrumpe la llamada AJAX en el lado de WordPress. Puedo anular manualmente las URL para cada uno de los métodos, pero me gustaría saber si hay una forma más elegante de hacer que la API AJAX funcione con Backbone.
He creado un complemento de demostración que muestra el problema específico en el que me he encontrado. Cargue la página de configuración y haga clic en cualquiera de las X mientras mira su inspector de red para ver los resultados de AJAX de valor 0 procedentes de WordPress.
https://github.com/hereswhatidid/wordpress-todo-backbone-demo
Respuestas:
Debe anular la
Backbone.sync
función para cambiar la URL utilizada para la llamada AJAX. Puedes aprender del plugin wp-backbone hace esto y más. A continuación, puede ver cómo cambia todas las acciones enPOST
oGET
, crea los parámetros, agrega elaction
parámetro y más.fuente
No necesita anular
Backbone.sync
ya que Backbone.sync anulará su propia solicitud $ .ajax con los parámetros que pase como opciones. Consulte este enlace para ver un tutorial sobre cómoBackbone.sync
funciona internamente: http://backbonejs.org/docs/backbone.html#section-141Puede agregar algo como lo siguiente en su modelo o colección:
Y luego procese los datos como datos de publicación regulares en el lado del servidor (con su modelo / modelos en
$_POST['payload']
).Este método hace:
emulateJSON
parámetro: crea una sintaxis más ágil tanto en la interfaz como en el servidor. Tendría que usar JSON.stringify en el parámetro 'data' de lo contrario.$_POST['payload']
luego contiene una matriz de todos sus datos de Backbone.fuente