gpt4 book ai didi

javascript - 什么时候需要在 Backbone.js 中使用 _.bindAll() ?

转载 作者:行者123 更新时间:2023-12-03 02:41:24 25 4
gpt4 key购买 nike

我正在学习backbone.js,对此感到困惑:我正在遵循教程: http://arturadib.com/hello-backbonejs/

正如您在第一个示例 (1.js) 中看到的:

(function($){
var ListView = Backbone.View.extend({
el: $('body'), // attaches `this.el` to an existing element.

initialize: function(){
_.bindAll(this, 'render'); // fixes loss of context for 'this' within methods

this.render(); // not all views are self-rendering. This one is.
},

render: function(){
$(this.el).append("<ul> <li>hello world</li> </ul>");
}
});

var listView = new ListView();
})(jQuery);

但是如果我注释掉这句话:_.bindAll(this, 'render');,这仍然有效。我在google上搜索过,有人说bindAll()方法是必要的,因为如果我切换上下文,this.render的调用可能不可用。我对“上下文”感到困惑。有人可以解释一下调用 (this.render) 何时不可用吗?

最佳答案

对于您给出的示例 _.bindAll(this, 'render'); 不是必需的,但如果您有回调函数,则 this 可能是更改为其他内容的上下文,然后 _bindAll() 会很方便。

例如:

initialize: function(){
_.bindAll(this, 'render', 'clickFunc');
},
events: {
'click .someElement': 'clickFunc'
},
clickFunc: function(e) {
/** If you remove the clickFunc from the list of events in bindAll,
'this' will refer to the element that invoked the event.

Adding the clickFunc event in the _.bindAll, ensures that 'this' stays
as the view.
*/
this /** <-- our focal point */
}

关于javascript - 什么时候需要在 Backbone.js 中使用 _.bindAll() ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14513991/

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