我创建了一个可重用的表视图,它采用表定义(JSON数组)和数据(JSON)并使用javascript呈现表。我使用为es6更新的here等mvc模式制作了表格。
我在视图中有硬编码事件,它在我的模型,视图和控制器的实例中工作得很好。这些事件就像" addRowClicked"和" modelChanged"然后调用回调函数进行操作。
例如,在视图中我创建了事件:
this.addRowClicked = new CIEvent(this);
在Controller上我附加了回调:
this.view.addRowClicked.attach(
function() {
self.addRow()
}
);
然后在创建视图时,我可以传递一个带有事件名称的按钮数组,该事件名称创建按钮并在单击时附加事件的notify方法
element.onclick = function () {
self[button.event_name].notify();
}
所以这一切都很完美,非常棒!
现在我正在尝试添加自定义事件而没有运气。自定义事件类似于" updateQuantity"这是表的一个实例所特有的。 updateQuantity会在更改时从输入元素触发,并将指定的单元格汇总并将该总和放在不同的单元格中。
我以为我可以在视图上简单地创建事件,在控制器上附加回调,然后将事件通知附加到onchange或onkeyup ...等等
但这不起作用。
以下是整个过程的一些提取代码....
要构建表格,我这样做:
let model = new TableModel(table_definition, data);
let view = new DataTableView(model, div, buttons);
let controller = new DataTableController(model, view);
现在我添加活动' 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();
});
修改元素时,我没有得到任何回应。
我希望我错过了一些基本的东西。谢谢大家!
答案 0 :(得分:0)
element.addEventListener("onkeyup", function(){
// self[event[index]].notify();
self.updateQuantity.notify();
});
应该是
element.addEventListener("keyup", function(){
// self[event[index]].notify();
self.updateQuantity.notify();
});
onkeyup应该是keyup