在parse.com上使用回调函数时如何保留范围?

时间:2014-02-04 02:26:04

标签: javascript parse-platform

所以当用户点击按钮时,我在视图中调用一个函数。此功能需要回调功能。我在同一视图中定义了回调。当调用回调时,我想用刚刚获得的附加信息渲染当前视图。但是,似乎你在回调函数中丢失了范围,因此在调用this.render()时会出错。说“全局对象没有方法渲染”。所以'this'现在指的是窗口对象。如何在我的视图中保留范围?所以这是我正在谈论的一个例子。

var profileView = Parse.View.extend({
    events: {
        "click #scan_item": "scanItem"
    },
    scanItem: function(){
        ScanItem(callback);
    },
    callback: function(info){
        this.render(info);
    },
    render: function(info){
        $(this.el).html(this.template({info: info}));
        return this;
    }
});

1 个答案:

答案 0 :(得分:1)

您需要将回调绑定到正确的'this'

可能会工作:

ScanItem(this.callback.bind(this))

(我不知道这个框架是否有绑定功能)

否则,旧学校:)将其保存在封闭范围内的变量

var that=this;
ScanItem(function(info){
  that.callback(info)
});

为什么传递给scanItem的函数需要被定义为好像是一个“方法”? 如果它必须知道被传递的论点 - 为什么不直接传递它们呢?

var that=this;
ScanItem(function(){
  that.render.apply(that,arguments);
});