首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >self.el对this.el

self.el对this.el
EN

Stack Overflow用户
提问于 2012-06-13 12:24:17
回答 2查看 1.3K关注 0票数 1

我正在跟踪一个backbone.js教程,并遇到了两个函数initialize()render()initialize()在附加一些html时使用$(self.el).append(),而render()使用$(this.el).append()。我对不同之处感到困惑,会感激你的解释,谢谢!

JS代码

代码语言:javascript
复制
// Views
window.WineListView = Backbone.View.extend({

    tagName:'ul',

    initialize:function () {
        this.model.bind("reset", this.render, this);
        var self = this;
        this.model.bind("add", function (wine) {
            $(self.el).append(new WineListItemView({model:wine}).render().el);
        });
    },

    render:function (eventName) {
        _.each(this.model.models, function (wine) {
            $(this.el).append(new WineListItemView({model:wine}).render().el);
        }, this);
        return this;
    }
});
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-13 12:26:06

第一种方法是在事件触发时范围发生变化时使用self来保持对this的引用。在匿名函数中(对于事件处理程序),this将引用触发事件的元素,而不是骨干控制器。

在第二种情况下,不需要引用。

票数 4
EN

Stack Overflow用户

发布于 2012-06-13 12:38:44

原因是JavaScript如何处理范围。

在初始化函数中,它们执行

代码语言:javascript
复制
var self = this;

因此,当它们将引用绑定到初始化的WineListView实例时,

代码语言:javascript
复制
this.model.bind("add", function (wine) {
    $(self.el).append(new WineListItemView({model:wine}).render().el);
 });

但是,如果将"this“作为第三个参数发送,则可以不使用self变量。第三个参数应该指示应该调用回调的作用域

代码语言:javascript
复制
this.model.bind("add", function (wine) {
    $(this.el).append(new WineListItemView({model:wine}).render().el);
 }, this);

如果您查看那里的呈现是绑定,它还使用第三个参数

代码语言:javascript
复制
this.model.bind("reset", this.render, this);

我还没有试过这些代码,但这是从读取主干http://backbonejs.org/#FAQ-this上的文档中得到的

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11014761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档