gpt4 book ai didi

javascript - BackboneJS : Avoid calling _. 绑定(bind)()

转载 作者:行者123 更新时间:2023-11-28 19:17:02 26 4
gpt4 key购买 nike

我正在使用 BackboneJS 框架,但遇到了一种情况,我必须不断地将函数包装到 _.bind() 中,以将 this 保持在正确的范围内。

一个例子是简单的 AJAX 调用。默认情况下,JQuery 将 this 更改为 AJAX 请求对象,但我想将 View 保留为 this:

var AwesomeView = BackboneView.extend({

firstFunction : function() {
$.getJSON(
"/test",
{},
_.bind(function(aData) {
this.secondFunction(aData);
}, this)
)
} ,

secondFunction : function(aData) {
console.log(aData)
}

});

我的代码库中有很多发生这种情况的示例,并且它有效,但似乎被黑客攻击了。

所以我的问题是,有没有更优雅的方法来解决这个问题?

最佳答案

有两种方法可以避免使用 _.bind 以及其他更优雅的使用方法。

我喜欢在代码中使用 _.bind_.bindAll。但我发现这个实现更优雅一些。

var AwesomeView = BackboneView.extend({
initialize: function() {
_.bindAll(this, 'func1', 'func2');
BackboneView.prototype.initialize.apply(this, arguments);
},
...
});

在这里,您将 View 函数 func1func2 绑定(bind)到 View 的上下文。您可以使用您的示例从任何上下文“正常”简单地调用它们:

func1 : function() {
$.getJSON("/test",{}, this.func2);
},
...

请注意,Function.prototype.bind 在 ECMA 脚本 5.1 中可用。

您还可以使用call,但它现在看起来与您的代码类似。

   firstFunction : function() {
var _this = this;
$.getJSON(
"/test",
{},
function(aData) {
_this.secondFunction.call(_this, aData);
});
)
}

关于javascript - BackboneJS : Avoid calling _. 绑定(bind)(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29613743/

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