我正在使用Prototype编写一些MVC JavaScript代码。问题是,当我在下面的代码片段中引用this
时,它当然会引用Window对象,而我需要它来引用我的Controller实例,以便它可以调用我的updateValue
函数,传递HTML元素ID。
我想我必须使用bind或bindAsEventListener,但我真的不明白。
var Foo = {
Controller: Class.create({
observeEvents: function() {
$$("#myform input").each(function(input) {
input.observe("blur", this.updateValue(input.id); // <- wrong this!
});
},
updateValue: function(elementID) {
...
}
})
}
非常感谢任何帮助。
答案 0 :(得分:2)
这应该有用。
observeEvents: function() {
var Controller = this;
$$("#myform input").each(function(input) {
input.observe("blur", Controller.updateValue.bind(Controller, input.id));
});
...
如果你不想学习如何使用bind
(坦率地说我不怪你)那么你就可以忘掉它并且只是使用另一个青少年闭合。
observeEvents: function() {
var Controller = this;
$$("#myform input").each(function(input) {
input.observe("blur", function(event) {
Controller.updateValue(input.id);
});
});
...