我有一个带有自定义获取函数和onFetchSuccess
函数的集合。onFetchSuccess
函数需要触发一些其他事件,所以它调用了this.trigger
,这是一个棘手的地方。看起来好像this
的上下文丢失了,因为trigger
没有找到。
fetch(options = {}) {
console.log("fetching");
this.trigger(this.FETCH_START);
options.success = this.onFetchSuccess;
options.url = this.url;
Backbone.Collection.prototype.fetch.call(this, options);
console.log("fetched");
}
onFetchSuccess(model, response, options) {
console.log("success!")
this.trigger("change");
}
结果就是Uncaught TypeError: this.trigger is not a function
我是不是遗漏了什么?从其他答案(对不同问题的回答)来看,这似乎是扩展fetch
函数的正确方法
1条答案
按热度按时间6pp0gazn1#
您需要将
onFetchSuccess
更改为arrow function。与常规函数不同,箭头函数没有自己的上下文。这意味着箭头函数的
this
是定义该函数的上下文的this
,而常规函数有自己的this
。如果您使用的是常规函数定义,则
this.trigger
的this
实际上是函数的this
,它没有trigger
方法。如果您使用箭头函数,
this
将是包含trigger
方法的函数,正如您所期望的。