我做了一個可重用的表視圖,它採用表定義(JSON數組)和數據(JSON)並使用JavaScript呈現表。我使用mvc模式創建表,如更新爲es6的here。無法獲取Javascript自定義事件發動onkeyup,onchange等
我在視圖中硬編碼的事件,在我的模型,視圖和控制器的實例內工作很好。這些事件就像「addRowClicked」和「modelChanged」,然後調用回調函數進行操作。
例如在視圖我創建的事件:
this.addRowClicked = new CIEvent(this);
在控制器附上回調:
this.view.addRowClicked.attach(
function() {
self.addRow()
}
);
然後創建視圖時我可以通過一個按鈕陣列與事件創建按鈕的名稱,並附上點擊時事件的通知方法
element.onclick = function() {
self[button.event_name].notify();
}
因此,所有的作品完美,非常棒!
現在我試圖添加自定義事件,但沒有運氣。自定義事件就像「updateQuantity」,這對於表的一個實例是唯一的。 updateQuantity會在更改時從輸入元素中被觸發,並將總結指定的單元格並將該總和放入不同的單元格中。
我想我應該能夠簡單地在視圖中創建時,附加回調控制器上,然後裝上事件通知的onchange或...的onkeyup等
但是,這是行不通的。
這裏是整個過程的某些提取的代碼....
要建立我做這個表:
現在我添加事件「updateQuantity」的視圖和回調在控制器上:
view.updateQuantity = new CIEvent(view);
controller.view.updateQuantity.attach(
function() {
console.log('update the quantity row')
}
);
如果我再從同一個文件中調用事件正常工作:
view.updateQuantity.notify(); // works fine
但是,如果我嘗試將它附加到一個onclick,onkeyup等元素上,事件將不會觸發......註釋代碼動態附加,但是我只是硬連線來試圖使其工作。我嘗試直接使用onkeyup等事件並使用addEventListener
let self = this;
// element[index] = this[event[index]].notify();
// element.onkeyup = this.updateQuantity.notify();
element.addEventListener("onkeyup", function(){
// self[event[index]].notify();
self.updateQuantity.notify();
});
修改元素時,我沒有得到任何響應。
我希望我缺少一些基本的東西。謝謝大家!