无法读取未定义的 属性 'bind',Backbone.js
Cannot read property 'bind' of undefined, Backbone.js
我有以下函数和许多绑定...
showDialog: function(data) {
var dialog = new dialog({
onOk: function(text) {
var obj = {
data: text.data
};
this.model.save(obj, {
method: 'PUT',
success: function() {
this.success().bind(this)
}.bind(this)
});
}.bind(this)
});
Main.dialogArea.show(dialog);
}
虽然代码有效,但它在控制台中抛出以下错误...
Uncaught TypeError: Cannot read property 'bind' of undefined
错误与以下行有关 this.success().bind(this)
。
我意识到,如果我改用 var self = this
,这个问题就会得到解决...
showDialog: function(data) {
var self = this;
var dialog = new dialog({
onOk: function(text) {
var obj = {
data: text.data
};
self.model.save(obj, {
method: 'PUT',
success: function() {
self.success()
}
});
}
});
Main.dialogArea.show(dialog);
}
如果我这样做,错误就会消失。知道为什么会这样吗?两种情况不应该一样吗?我没有使用 ES6,所以我不能使用箭头函数,我想使用 bind()
.
应该是
this.success.bind(this)
而不是 this.success().bind(this)
。
当前您正在调用函数,函数 returns undefined
并且您正在对其调用 .bind
。
旁注:
既然你在做
success: function() {}.bind(this)
您不必在其中绑定直接方法调用,即
success: function() {
this.success();
}.bind(this)
应该可以,或者只是
success: this.success.bind(this)
我有以下函数和许多绑定...
showDialog: function(data) {
var dialog = new dialog({
onOk: function(text) {
var obj = {
data: text.data
};
this.model.save(obj, {
method: 'PUT',
success: function() {
this.success().bind(this)
}.bind(this)
});
}.bind(this)
});
Main.dialogArea.show(dialog);
}
虽然代码有效,但它在控制台中抛出以下错误...
Uncaught TypeError: Cannot read property 'bind' of undefined
错误与以下行有关 this.success().bind(this)
。
我意识到,如果我改用 var self = this
,这个问题就会得到解决...
showDialog: function(data) {
var self = this;
var dialog = new dialog({
onOk: function(text) {
var obj = {
data: text.data
};
self.model.save(obj, {
method: 'PUT',
success: function() {
self.success()
}
});
}
});
Main.dialogArea.show(dialog);
}
如果我这样做,错误就会消失。知道为什么会这样吗?两种情况不应该一样吗?我没有使用 ES6,所以我不能使用箭头函数,我想使用 bind()
.
应该是
this.success.bind(this)
而不是 this.success().bind(this)
。
当前您正在调用函数,函数 returns undefined
并且您正在对其调用 .bind
。
旁注:
既然你在做
success: function() {}.bind(this)
您不必在其中绑定直接方法调用,即
success: function() {
this.success();
}.bind(this)
应该可以,或者只是
success: this.success.bind(this)