2016-09-13 6 views
-2

Я добавил функцию удаления в приложение списка задач, которое я создал. Функция удаления работает; однако, когда я обновляю страницу, все элементы, которые я удалил, возвращаются. Как я могу удалить элементы из базы данных?удалить из базы данных с помощью javascript

$(function() { 
 

 
    // The taskHtml method takes in a JavaScript representation 
 
    // of the task and produces an HTML representation using 
 
    // <li> tags 
 
    function taskHtml(task) { 
 
     var checkedStatus = task.done ? "checked" : ""; 
 
     var liClass = task.done ? "completed" : ""; 
 
     var liElement = '<li id="listItem-' + task.id +'" class="' + liClass + '">' + 
 
     '<div class="view"><input class="toggle" type="checkbox"' + 
 
     " data-id='" + task.id + "'" + 
 
     checkedStatus + 
 
     '><label>' + 
 
     task.title + 
 
    // '<button class="deletebutton" type="button">Delete</button>' + 
 
     '</label></div></li>'; 
 

 
     return liElement; 
 
    } 
 
    // toggleTask takes in an HTML representation of the 
 
    // an event that fires from an HTML representation of 
 
    // the toggle checkbox and performs an API request to toggle 
 
    // the value of the `done` field 
 
    function toggleTask(e) { 
 
     var itemId = $(e.target).data("id"); 
 

 
     var doneValue = Boolean($(e.target).is(':checked')); 
 

 
     $.post("/tasks/" + itemId, { 
 
     _method: "PUT", 
 
     task: { 
 
      done: doneValue 
 
     } 
 
     }).success(function(data) { 
 
     var liHtml = taskHtml(data); 
 
     var $li = $("#listItem-" + data.id); 
 
     $li.replaceWith(liHtml); 
 
     $('.toggle').change(toggleTask); 
 
     }); 
 
    
 
    } 
 

 
    $.get("/tasks").success(function(data) { 
 
     var htmlString = ""; 
 

 
     $.each(data, function(index, task) { 
 
     htmlString += taskHtml(task); 
 
     }); 
 
     var ulTodos = $('.todo-list'); 
 
     ulTodos.html(htmlString); 
 

 
     $('.toggle').change(toggleTask); 
 

 
    }); 
 
    
 
    $('#new-form').submit(function(event) { 
 
     event.preventDefault(); 
 
     var textbox = $('.new-todo'); 
 
     var payload = { 
 
     task: { 
 
      title: textbox.val() 
 
     } 
 
     }; 
 
     
 
     $.post("/tasks", payload).success(function(data) { 
 
     var htmlString = taskHtml(data); 
 
     var ulTodos = $('.todo-list'); 
 
     ulTodos.append(htmlString); 
 
     $('.toggle').click(toggleTask); 
 
     $('.new-todo').val(''); 
 
     }); 
 
    }); 
 
    
 
    //////this section works 
 
    $("#deletebutton").on("click", function() { 
 
     $(".todo-list li.completed").remove() 
 
     
 
    ///////this does not want to remove the item from the database 
 
     $.destroy("/tasks/" + itemId, { 
 
     _method: "destroy", 
 
     task: { 
 
      done: doneValue 
 
     } 
 
    }); 
 
    
 
}); 
 

+0

Что такое $ .destroy? Я не могу найти его в jQuery API. – mm759

+0

Нам нужен еще немного контекста: Это приложение для узлов? это приложение для рельсов, и вы используете JS на интерфейсе? –

+0

его рубин на рельсах. $ .destroy - это то, что я написал. Я все еще участвую в этом, хотя мы могли бы написать его таким образом, потому что он соответствует рельсам спокойных маршрутов. –

ответ

0

 
 
$(function() { 
 
    // The taskHtml method takes in a JavaScript representation 
 
    // of the task and produces an HTML representation using 
 
    // <li> tags 
 
    function taskHtml(task) { 
 
     var checkedStatus = task.done ? "checked" : ""; 
 
     var liClass = task.done ? "completed" : ""; 
 
     var liElement = '<li id="listItem-' + task.id +'" class="' + liClass + '">' + 
 
     '<div class="view"><input class="toggle" type="checkbox"' + 
 
     " data-id='" + task.id + "'" + 
 
     checkedStatus + 
 
     '><label>' + 
 
     task.title + 
 
    // '<button class="deletebutton" type="button">Delete</button>' + 
 
     '</label></div></li>'; 
 
     return liElement; 
 
    } 
 
    // toggleTask takes in an HTML representation of the 
 
    // an event that fires from an HTML representation of 
 
    // the toggle checkbox and performs an API request to toggle 
 
    // the value of the `done` field 
 
    function toggleTask(e) { 
 
     var itemId = $(e.target).data("id"); 
 
     var doneValue = Boolean($(e.target).is(':checked')); 
 
// still dont understand this 
 
     $.post("/tasks/" + itemId, { 
 
     _method: "PUT", 
 
     task: { 
 
      done: doneValue 
 
     } 
 
     }).success(function(data) { 
 
     var liHtml = taskHtml(data); 
 
     var $li = $("#listItem-" + data.id); 
 
     $li.replaceWith(liHtml); 
 
     $('.toggle').change(toggleTask); 
 
     }); 
 
    
 
    } 
 
    $.get("/tasks").success(function(data) { 
 
     var htmlString = ""; 
 
     $.each(data, function(index, task) { 
 
     htmlString += taskHtml(task); 
 
     }); 
 
     var ulTodos = $('.todo-list'); 
 
     ulTodos.html(htmlString); 
 
     $('.toggle').change(toggleTask); 
 
    }); 
 
    
 
    $('#new-form').submit(function(event) { 
 
     event.preventDefault(); 
 
     var textbox = $('.new-todo'); 
 
     var payload = { 
 
     task: { 
 
      title: textbox.val() 
 
     } 
 
     }; 
 
     
 
     $.post("/tasks", payload).success(function(data) { 
 
     var htmlString = taskHtml(data); 
 
     var ulTodos = $('.todo-list'); 
 
     ulTodos.append(htmlString); 
 
     $('.toggle').click(toggleTask); 
 
     $('.new-todo').val(''); 
 
     }); 
 
    }); 
 
    
 
    
 
    $("#deletebutton").on("click", function() { 
 
     $(".todo-list li.completed").remove() 
 
     
 
    
 
     var li_to_delete = $('.todo-list li.completed'); 
 
     
 
     $.ajax({ 
 
     type: 'DELETE', 
 
     url: "/tasks" + li_to_delete, 
 
     success: function(){ 
 
     li_to_delete.remove(); 
 
     } 
 
     }); 
 
    }); 
 
     
 
     
 
     
 
}); 
 

я изменил код, но им не уверен, как правильно извлечь URL.

Смежные вопросы