gpt4 book ai didi

javascript - 无法理解backbone.js教程示例

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

我正在学习backbone.js,如下this tutorial ,但我在理解第一个示例时遇到了问题:

(function($){
var ListView = Backbone.View.extend({
...
initialize: function(){
_.bindAll(this, 'render'); // fixes loss of context for 'this' within methods

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

Q1:为什么使用(function($){})(jQuery);而不是一个完全正常工作的 (function(){})();

问题2:_.bindAll(this, 'render') 是做什么的?它如何修复方法中“this”上下文的丢失?

最佳答案

Q1:通过将 jquery 作为参数传递,您可以做两件事:

  1. 如果需要使用 2 个版本的 jquery - 你已经准备好了
  2. 模块模式可能更好地被认为是封装良好且具有明确定义的依赖关系的东西,因此通过声明 jquery 是一个参数 - 您声明了明确的依赖关系。当然还有其他方法可以做到这一点(例如 RequireJS ),但这也是一种方法

Q2:bindAll 是 Underscore.js 的一个实用方法,它为特定方法绑定(bind) this - 因此,当调用该方法时(例如作为回调)正确的 this 将在其内部使用。

例如:

(function($){
var ListView = Backbone.View.extend({
...
initialize: function(){
// fixes loss of context for 'this' within methods
_.bindAll(this, 'render', 'makestuff');

this.render(); // not all views are self-rendering. This one is.
},
...
makestuff : function() {
...
this.stuff = ... // some action on the list's instance
}
});
...
})(jQuery);

在代码的某些部分,您会执行以下操作:

var list = new ListView({...});
$('#button').on('click', list.makestuff);
makestuff 方法中的

this 是对上述 list 的引用,而不是 on 函数所在的任何上下文当 makestuff 在其中实际调用时。

实际实现依赖于使用 applycall 函数将函数执行的上下文绑定(bind)到特定对象。

关于javascript - 无法理解backbone.js教程示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14066730/

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