Javascript 向现有模型(backbone.js)添加更多数据
集合的初始Javascript 向现有模型(backbone.js)添加更多数据,javascript,jquery,backbone.js,underscore.js,Javascript,Jquery,Backbone.js,Underscore.js,集合的初始fetchdone将检索每个模型的部分详细信息。当用户单击网页上的某个项目时,需要检索该项目的更多详细信息并将其显示给用户 用于返回该项初始提取中丢失的附加数据的API函数已实现(/API/full_details) 问题:我应该如何检索附加的并将其附加到现有模型中?我的理解是,如果我执行model.fetch(),该模型中的现有数据将消失。我认为,如果模型的fetch()有一个选项{add:true},比如集合的fetch(),这就是我在这里需要的 型号 Listing = Back
fetch
done将检索每个模型的部分详细信息。当用户单击网页上的某个项目时,需要检索该项目的更多详细信息并将其显示给用户
用于返回该项初始提取中丢失的附加数据的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
实例列表
(或列表完整
)模型。这将得到/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()
}
}
});
然后,完整列表视图可以检查其列表
是否已完全加载:如果已加载,则视图可以显示完整列表,但如果模型尚未全部加载,该视图可以显示存在的内容,并在等待服务器响应完整的列表模型时抛出一个旋转器/加载器/旋转器/任何你称之为它的东西;与往常一样,您的视图将列出模型中的事件,以了解何时一切就绪
您可以对现有的列表
模型执行相同的操作,只需启动一个原始的$。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...
}
});
}