Backbone 网在获取时丢失上下文

v6ylcynt  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(122)

我有一个带有自定义获取函数和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函数的正确方法

6pp0gazn

6pp0gazn1#

您需要将onFetchSuccess更改为arrow function
与常规函数不同,箭头函数没有自己的上下文。这意味着箭头函数的this是定义该函数的上下文的this,而常规函数有自己的this
如果您使用的是常规函数定义,则this.triggerthis实际上是函数的this,它没有trigger方法。
如果您使用箭头函数,this将是包含trigger方法的函数,正如您所期望的。

相关问题