我正在尝试执行以下操作:
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是一个视图的属性,但显然不是这里的情况。我想不出有办法正确地做到这一点。通常使用闭包我只做var = this,但在这种情况下我无法将“那”放入范围。
我试图通过以下方式将其纳入范围:
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
}
);
}
谢谢代码运行者。
答案 0 :(得分:1)
尝试使用_.bindall()
,我们会非常清楚地讨论同样的问题here
答案 1 :(得分:1)
以下是使用jquery
进行相同操作的方法geoJsonSynced: function () {
this.geojson = L.geoJson(
this.collection.geojson(),
{
onEachFeature: $.proxy(this.onEachFeature,this)
}
);
}