在TypeScript / Backbone情况下丢失对此的引用

时间:2017-05-18 19:58:33

标签: typescript backbone.js

这是在BackBone模型中:

calculatePrice() {

}

initialize() {
            _.bindAll(this, 'caclulatePrice');
            this.on("change", function() {
                this.calculatePrice();    
            });
}

问题在于,当编译内部时,这就是这个,而不是_this实际上是模型。

环顾四周(基于CoffeeScript中的类似案例)看起来答案与=>有关。但我无法做到这一点,例如

this.on("change", function() => {

无法编译。

我需要做些什么来使内部引用BackBone模型(它所在的类)?

更新

这有效,但它不是'正确'的方式。

let that = this;
this.on("change",  function() { that.caclulatePrice()  });

1 个答案:

答案 0 :(得分:1)

您将所需的this绑定到calculatePrice函数:

_.bindAll(this, 'calculatePrice'); // I'm assuming that 'caclulatePrice' is a typo...

不是您传递给this.on的匿名函数。

更好的方法是放弃_.bindAll并将第三个参数中所需的this提供给on

this.on('change', this.calculatePrice, this);

或者,如果您真的想使用_.bindAll,只需删除匿名函数:

_.bindAll(this, 'calculatePrice');
this.on('change', this.calculatePrice);

您还可以使用listenTo为您设置适当的this