使用相同的成功和错误回调在backbone.js中重新获取collection.fetch

时间:2012-07-02 19:44:10

标签: jquery backbone.js

我有一个基本的集合,可以对文档进行提取:ie:

message_list.fetch({

            success: function(){
                console.log('success');
                //render
                grid_view.render();
            },
            error: function(xhr, text, ajax){
                //set a column limit and retru
                console.log('retrying');
                urlParams.colLimit = true;
                $.ajax(this);
                return;
            },
            data: urlParams,
            processData:true
        });

这从服务器抓取一个json,它正在查询带有thrift的hbase表。对于某些帐户,hbase中的数据集太大而且内存不足并返回500响应。所以我想在添加新的查询参数后重新启动相同的ajax调用错误。看看jquery .ajax文档,它说要调用$ .ajax(this),但这是窗口对象。 xhr变量也有空成功函数。如何使用相同的属性和成功/错误函数重新激活相同的ajax调用?

2 个答案:

答案 0 :(得分:0)

这很容易 - 制作一个你存储的对象并可以传回来:

var success_cb = function(){
    console.log('success');
    //render
    grid_view.render();
};

var error_cb = function(xhr, text, ajax){
    //set a column limit and retru
    console.log('retrying');
    urlParams.colLimit = true;
    $.ajax(this);
    return;
};

var fetch_options = {
        success: success_cb, 
        error: error_cb,
        data: urlParams,
        processData:true
}

message_list.fetch(fetch_options);

只要fetch_options与两个回调函数在同一范围内定义,并且fetch_options可以在该范围之外访问,任何可以访问fetch_options的内容都可以将其用作这是.fetch的论据。

答案 1 :(得分:0)

使用Function.bind将回调绑定到所需的上下文:success_cb.bind(desired_context) Function.bind是ECMAScript 5,因此您可能需要为其添加垫片。类似的选项是使用$ .proxy:http://api.jquery.com/jQuery.proxy/