Backbone 使用回调与承诺获取 collection
Backbone fetching a collection using callbacks vs promises
我有一个位置 collection,我从服务器 r 返回一个 JSON 响应,包括根标题,格式为:
{'locations':[
{
"id": 1,
"address": 'first address'
},{
"id": 2,
"address": 'second address'
}
]}
我到处都读到过使用 promise 的方法而不是 backbone 成功和错误回调的最佳实践,但事情就是这样。我已经将 Location collection 上的 parse 方法覆盖到 return 数组,但似乎使用 promises 方法根本没有调用 parse 方法。例如:
var Locations = new Backbone.Collection.extend({...})
var locations = new Locations()
locations.fetch().then(function(response){
console.log(response)
})
returns 一个具有 属性 个位置的 Object 文字,它具有位置数组的值。但是如果我使用
locations.fetch({
success: function(response){
console.log(response)
}
})
我得到了想要的行为,即 object 带有构造函数位置和其中的所有模型。
此外,如果我删除后端 JSON 响应的根标题并删除 collection 上的解析方法重写,我会得到一个 object 与构造函数数组,而通过成功回调,我得到一个 object 与构造函数 Locations.
所以我的问题是,如果使用 promise 的方法更好,如何采用与成功和错误回调类似的行为?
请求的更新:
这是 Locations collections
中的解析函数
var Locations = new Backbone.Collection.extend({
parse: function(response){
return response['locations']
}
})
直接使用集合:
locations.fetch().then(function(){
console.log(locations);
})
fetch
方法 returns 发出请求的 jqXHR 承诺,因此它 returns 从服务器收到的原始响应。承诺不知道响应的解析。
将 success
回调作为选项传递给 fetch
对您有用的原因是:(参见 Collection.fetch 文档)
The options hash takes success
and error
callbacks which will both be passed (collection, response, options)
as arguments.
因此,如果使用 success
回调传递给 fetch
,第一个参数实际上是 collection
,而不是 response
。
我有一个位置 collection,我从服务器 r 返回一个 JSON 响应,包括根标题,格式为:
{'locations':[
{
"id": 1,
"address": 'first address'
},{
"id": 2,
"address": 'second address'
}
]}
我到处都读到过使用 promise 的方法而不是 backbone 成功和错误回调的最佳实践,但事情就是这样。我已经将 Location collection 上的 parse 方法覆盖到 return 数组,但似乎使用 promises 方法根本没有调用 parse 方法。例如:
var Locations = new Backbone.Collection.extend({...})
var locations = new Locations()
locations.fetch().then(function(response){
console.log(response)
})
returns 一个具有 属性 个位置的 Object 文字,它具有位置数组的值。但是如果我使用
locations.fetch({
success: function(response){
console.log(response)
}
})
我得到了想要的行为,即 object 带有构造函数位置和其中的所有模型。
此外,如果我删除后端 JSON 响应的根标题并删除 collection 上的解析方法重写,我会得到一个 object 与构造函数数组,而通过成功回调,我得到一个 object 与构造函数 Locations.
所以我的问题是,如果使用 promise 的方法更好,如何采用与成功和错误回调类似的行为?
请求的更新:
这是 Locations collections
中的解析函数var Locations = new Backbone.Collection.extend({
parse: function(response){
return response['locations']
}
})
直接使用集合:
locations.fetch().then(function(){
console.log(locations);
})
fetch
方法 returns 发出请求的 jqXHR 承诺,因此它 returns 从服务器收到的原始响应。承诺不知道响应的解析。
将 success
回调作为选项传递给 fetch
对您有用的原因是:(参见 Collection.fetch 文档)
The options hash takes
success
anderror
callbacks which will both be passed(collection, response, options)
as arguments.
因此,如果使用 success
回调传递给 fetch
,第一个参数实际上是 collection
,而不是 response
。