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