向现有模型添加更多数据(backbone.js)
问题描述:
为集合完成的初始fetch
将检索每个模型的部分详细信息。当用户点击网页上的项目时,需要检索该项目的更多细节并将其显示给用户。向现有模型添加更多数据(backbone.js)
返回在该项目的初始提取中丢失的额外数据的API函数已经实现(/api/full_details
)。
问题:如何检索附加并将其附加到现有模型?我的理解是,如果我做了model.fetch()
,那么该模型中的现有数据将会消失。我认为如果fetch()
对于模型有一个选项{add:true}
像集合fetch()
,这将是我需要在这里。
型号
Listing = Backbone.Model.extend({
});
收集
ListingCollection = Backbone.Collection.extend({
model: Listing,
url: '/api/search'
});
查看
ListingListView = Backbone.View.extend({ ........ });
ListingView = Backbone.View.extend({
events: {
'click': 'getFullDetails'
},
getFullDetails: function() {
// What should I do here?
}
})
某处在路由器
this.listingList = new ListingCollection();
var self = this;
this.listingList.fetch({
data: {some:data},
processData: true,
success: function() {
self.listingListView = new ListingListView({ collection: self.listingListNew });
self.listingListView.render();
}
答
我可能会使用两个单独的模型如下:
- 您现有的模式将成为
ListingSummary
和您的收藏将包含ListingSummary
实例。 - 为完整版本创建新的
Listing
(或ListingFull
)模型。这将得到/api/full_details
的支持。
你可以使用你已经在你的总结模型的信息初始化全型号:
var ListingSummary = Backbone.Model.extend({
//...
getListing: function() {
if(!this._full) {
this._full = new Listing({ summary: this });
this._full.fetch();
}
return this._full;
}
});
,然后通过在完整版:
var Listing = Backbone.Model.extend({
initialize: function() {
if(this.options.summary) {
// Copy the interesting bits from this.options.summary.attributes
// to this.attributes, possibly using this.set()
}
}
});
那么你的完整列表,查看可以检查它的Listing
是否完全加载:如果是,那么视图可以显示完整的列表,但是如果模型还没有全部存在,视图可以显示那里是什么,并抛出一个微调器/加载器/ th强盗/无论你何时打电话 - 它在等待服务器响应的完整Listing
模型;像往常一样,您的视图将列出模型中的事件,以了解什么时候一切准备就绪。
你可以做你的现有Listing
模型同样的事情,你只火了一个原始$.ajax
调用,而不是使用一个单独的模型:
loadFullModel: function() {
if(this._fullyLoaded)
return;
// Call out to /api/full_details ...
var _this = this;
$.ajax({
//...
success: function(data) {
// Do things with data...
_this._fully_loaded = true;
// Trigger your event...
}
});
}