Javascript在成功回调时将变量保留在作用域中(jquery/backbonejs/parse函数)

Javascript在成功回调时将变量保留在作用域中(jquery/backbonejs/parse函数),javascript,jquery,backbone.js,Javascript,Jquery,Backbone.js,下面我使用主干js获取一个集合。对于请求的响应,我想对收集执行一些逻辑来处理数据。我正在修改父集合(源类型)上的解析方法,以附加子集合(源帐户),并且仅当确实存在源帐户时才包括源类型 我不想在没有主要加载所有数据的情况下呈现它,因此我认为使用javascript确保安全的唯一方法是成功回调 正如您在下面的代码中所看到的,在parse函数中,我构造了一个名为“response_object”的新对象。问题是,当我尝试将此对象打包到成功回调中时,集合中不包含我打包到其中的任何对象。您将如何重写此文件

下面我使用主干js获取一个集合。对于请求的响应,我想对收集执行一些逻辑来处理数据。我正在修改父集合(源类型)上的解析方法,以附加子集合(源帐户),并且仅当确实存在源帐户时才包括源类型

我不想在没有主要加载所有数据的情况下呈现它,因此我认为使用javascript确保安全的唯一方法是成功回调

正如您在下面的代码中所看到的,在parse函数中,我构造了一个名为“response_object”的新对象。问题是,当我尝试将此对象打包到成功回调中时,集合中不包含我打包到其中的任何对象。您将如何重写此文件以使其正确工作

window.AdminSourceTypes = Backbone.Collection.extend({
    model: window.AdminSourceType,  
    url: '/api/sources',   
    parse: function(response){   
        // create response object
        response_object = [];           
        x = 0;
        _.each(response, function(item){
            //get child collection (accounts) from one of "source type's" attributes
            collection = new window.AdminAccounts();
            collection.url = item.accounts_url;
            //get all accounts
            collection.fetch({ 
                //only add the source type to the response object 
                //if there are accounts associated to it             
                success: function(accounts_collection){
                    if(accounts_collection.size() > 0){
                    response_object[x] = item;      
                    }
                }
            });
            x++;
        });
        return response_object;         
    }
});

这就是我所说的:

    window.sources = new window.AdminSourceTypes({
      events: {
      'reload':'render'
      }
     render: function(){... bla bla .... }
    });

    window.sources.fetch({});

    window.AdminSourceTypes = Backbone.Collection.extend({
    model: window.AdminSourceType,
    url: '/api/sources',
    parse: function(response){
        cmp = this;
        response_object = []; 
        x = 0;
        y = 0;
        _.each(response, function(item){‣
            collection = new window.AdminAccounts();
            collection.url = item.accounts_url;
            collection.fetch({
                success: function(data){
                    x++;
                    if(data.size()>0){
                        item.accounts = collection;
                        window.sources.add(item);
                        window.sources.trigger('reload');
                    }   
                }   
            }); 
        }); 
    }   
}); 
因此,我不再等待成功回调,而是让parse方法不返回任何内容,如果满足我的条件,就将该项添加到集合中

可能重复的。