gpt4 book ai didi

javascript - 调用渲染作为回调时访问 View 属性

转载 作者:行者123 更新时间:2023-11-30 10:24:18 24 4
gpt4 key购买 nike

我必须在 render() 函数中使用 guid 变量,但我只能将它传递给构造函数。我这个代码:

app.views.CompanyView = Backbone.View.extend({
el: '#company-view',
guid: '',

initialize: function (options) {
this.guid = options.guid;
},

render: function () {
var guid = this.guid;
}
});

我这样创建 View :

app.currentView = new app.views.CompanyView({guid: guid});

然后我将 render() 函数作为参数传递,以将其用作回调:

function call(callback){
callback();
}

call(app.currentView.render);

我也尝试了 this.guidoptionsthis.options,但它们都是 undefined .有没有办法在不使用它的参数或全局变量的情况下将此变量传递给 render() 函数?这是一个 JsFiddle example .

最佳答案

当你通过这个调用render时:

function call(callback){
callback();
}

您将其作为普通函数调用,因此 render 中的 this 将是 window。请记住,JavaScript 中的 this 取决于函数的调用方式,而不是函数的定义方式(当然除非您正在使用绑定(bind)函数)。

您有一些选择:

  1. 使用 _.bindAllrender 绑定(bind)到 View , _.bind , $.proxy , Function.bind , ...

    initialize: function() {
    _.bindAll(this, 'render');
    }

    演示:http://jsfiddle.net/ambiguous/GsUfY/

  2. 如今更常见的方法是通过函数传递上下文,然后调用回调的人使用适当的上下文使用 callapply :

    function call(callback, context){
    callback.apply(context);
    }

    演示:http://jsfiddle.net/ambiguous/LnwPr/

  3. 自己动手:

    call(function() { v.render() });

    这通常采用 var _this = this; 的形式,后跟一个使用 _this.some_method() 而不是仅仅传递 this 的匿名函数。 some_method 作为回调。

    演示:http://jsfiddle.net/ambiguous/K2Xj4/

我更喜欢第二种选择。

关于javascript - 调用渲染作为回调时访问 View 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20198645/

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