0
的ECMAScript 6兩個按鈕,控制類
的兩個實例,到目前爲止,在頁面上的兩個按鈕:編輯和刪除。會有更多(添加評論等)。所以,我想開發一些通用的方法,而不是單獨對每個按鈕進行操作。
每個按鈕都屬於「自定義控件」類,並且應該發送一個AJAX請求。
走進我已經包括了請求所必需的信息的按鈕標籤(URL等):
<button id="main-object-delete" data-url="{{ object.get_delete_url }}" data-redirect="{{ object.get_delete_success_url }}" type="button" class="custom-main custom-control custom-delete btn btn-default " aria-label="Left Align">
代碼:
$(document).ready(function() {
class GeneralManager {
// Creates managers for each type of controls.
constructor() {
this.handle_buttons();
} // constructor
handle_buttons(){
let $button_list = $('.custom-control')
$button_list.each(function(index, button){
let button_manager = new ControlManager(button);
});
}
} // GeneralManager
function show_get_form(data, button, url, redirect){
let nest = button.closest(".custom-nest")
nest.innerHTML = data;
let act_cancel_manager = new SubmitCancelManager(url, redirect);
}
class ControlManager {
// Operates on main object only.
ajax_get(){
$.ajax({method: "GET",
url: self.url,
success: function(data){ show_get_form(data,
self.button,
self.url,
self.redirect); },
error: generalFail
});
} // ajax_get
constructor(button){
self = this; // Protection against binding "this" to something else.
this.button = button;
this.url = this.button.getAttribute("data-url")
this.redirect = this.button.getAttribute("data-redirect")
this.button.onclick = this.ajax_get;
} // constructor
}
let general_manager = new GeneralManager();
}); // $(document).ready(function()
的想法是,爲每個按鈕一個新的ControlManager對象被創建。
問題是兩個按鈕都會觸發對要刪除的網址的請求。刪除按鈕是兩個中的最後一個。如果我更改按鈕的順序,則兩個按鈕都會將請求發送到編輯網址。
您能否幫助我理解爲什麼將ControlManager類的單獨實例分配給不同按鈕的想法不起作用。如何最優雅地應對這個問題?