Estou tentando criar um simples plugin TODO usando o Backbone e encontrei um problema com a API AJAX. Para obter a chamada AJAX correta, você deve passar o parâmetro "action" como este:
admin-ajax.php? action = get_todos
que funciona bem para o método GET no Backbone. No entanto, ao usar o DELETE Backbone, usará um URL como este por padrão:
admin-ajax.php? action = get_todos / 9
onde "9" é o ID do todo que está sendo excluído. Ao adicionar esse ID, ele interrompe a chamada AJAX no lado do WordPress. Posso substituir manualmente os URLs de cada um dos métodos, mas gostaria de saber se existe uma maneira mais elegante de fazer com que a API AJAX funcione com o Backbone.
Eu criei um plug-in de demonstração que mostra o problema específico em que me deparei. Carregue a página de configurações e clique em qualquer um dos Xs enquanto assiste ao seu inspetor de rede para ver os resultados AJAX de 0 valor provenientes do WordPress.
https://github.com/hereswhatidid/wordpress-todo-backbone-demo
Respostas:
Você precisa substituir a
Backbone.sync
função para alterar o URL usado para a chamada AJAX. Você pode aprender com o plugin wp-backbone faz isso e muito mais. Abaixo, você pode ver como ele altera todas as ações em umPOST
ouGET
, criar os parâmetros, adicionar oaction
parâmetro e muito mais.fonte
Você não precisa substituir,
Backbone.sync
pois o Backbone.sync substituirá sua própria solicitação $ .ajax com os parâmetros que você passa como opções. Consulte este link para obter uma explicação de comoBackbone.sync
funciona internamente: http://backbonejs.org/docs/backbone.html#section-141Você pode adicionar algo como o seguinte em seu modelo ou coleção:
E então processe os dados como dados regulares de publicação no lado do servidor (com seu modelo / modelos
$_POST['payload']
).Este método faz:
emulateJSON
parâmetro: cria uma sintaxe mais enxuta no frontend e no backend. Você precisaria usar JSON.stringify no parâmetro 'data' caso contrário.$_POST['payload']
em seguida, contém uma matriz de todos os seus dados do Backbone.fonte