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

标签 javascript backbone.js properties

我必须在 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/

相关文章:

javascript - 将数字 10 转换为 0.10 float

javascript - 无法在javascript中获取声明的变量值

backbone.js - 通过listenTo跟踪主干事件

json - 带有 Backbone.js REST API 的 flask

jsf - c :set for bean properties

javascript - 未捕获的类型错误 : Cannot read property 'filterText' of undefined

javascript - 使用 javascript 在元素中创建元素

javascript - Backbone.js 将子变量持久化到父级

c# - 如何在没有 setter 的情况下设置属性值

c++ - "Property"类似的方法而不是 C++ 中的 getter 和 setter?