我正在使用树形结构,所以每当我想从树叶到树干的路上工作时,我都需要做一些非常好的发现,但我基本上都想创建一个我能通过的函数函数和应用/调用/绑定/原始上下文的东西,以便我可以看到我原来的变量。解释会很棒。
layerListView = Backbone.Marionette.CollectionView.extend({
updateSelectedModelsInTree: function () {
var col = myApp.request('someOtherCollection');
this.collection.startFromLeaves(function (m) {
this.updateSelected(m);
// col is undefined in here
}, this);
}
});
layerCollection = Backbone.Collection.extend({
startFromLeaves: function (doToModel, context) {
if (!this.models) return;
for (var i = this.models.length - 1; i >= 0; i--) {
var model = this.models[i],
tag = this.models[i].get('tag');
if (tag == 'branch') this.startFromLeaves(arguments);
doToModel.call(context, model);
}
}
});
所以我被困在这里,而我想做的就是能够在传递给startFromLeaves的top函数中看到col变量。我不知道如何使用call / bind / apply,但我猜测我的上下文是什么让一切都失去了。
答案 0 :(得分:0)
这允许您传递具有此上下文集的函数。所以例如你可以做
updateSelectedModelsInTree: function () {
var col = myApp.request('someOtherCollection');
this.collection.startFromLeaves(_.bind(function (m) {
this.updateSelected(m);
// col is undefined in here
}, this));
}
"这"你的功能内部现在将永远是"这个"包含" updateSelectedModelsInTree"