gpt4 book ai didi

javascript - 访问 Backbone 从嵌套函数调用中查看 this

转载 作者:行者123 更新时间:2023-12-02 17:14:54 24 4
gpt4 key购买 nike

我正在尝试执行以下操作:

Backbone.View.extend({
...

onEachFeature: function (feature, layer) {
// "this" should be the view but is
// the function like normally in closures
this.doSomething();
},

geoJsonSynced: function () {
this.geojson = L.geoJson(
this.collection.geojson(),
{
onEachFeature: this.onEachFeature
}
);
}


...

});

我认为这是一个不同的情况,因为 onEachFeature 是 View 的一个属性,但显然这里的情况并非如此。我想不出一种方法可以正确地做到这一点。通常,对于闭包,我只需执行 var that = this,但在这种情况下,我无法将“that”放入作用域中。

我尝试通过以下方式将其纳入范围:

geoJsonSynced: function () {
var that = this;
this.geojson = L.geoJson(
this.collection.geojson(),
{
onEachFeature: this.onEachFeature
}
);
}

我想我做错了。

目前,我正在以一种非常糟糕的方式(在我自己看来)通过使用全局变量并在 onEachFeature 中执行以下操作:

onEachFeature: function (feature, layer) {
var view = globalVariable.someView;
view.doSomething();
}

有更好的方法吗?

编辑:修复比我想象的要容易:

geoJsonSynced: function () {
var onEachFeature = _.bind(this.onEachFeature, this);
this.geojson = L.geoJson(
this.collection.geojson(),
{
onEachFeature: onEachFeature
}
);
}

感谢代码运行者。

最佳答案

尝试使用_.bindall(),同样的问题讨论得很清楚here

关于javascript - 访问 Backbone 从嵌套函数调用中查看 this,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24529317/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com