我需要使用backbone.js将来自两个不同RESTful端点的数据组合起来。我尝试使用Backbone.RelationalModel扩展。因此,我得到了以下代码:
app.Pilots = Backbone.RelationalModel.extend({
url: POST_SUBMITTER.root + 'cloud_base/v1/pilots',
initialize: function(){
}
});
app.Flight = Backbone.RelationalModel.extend({
initialize: function(){
},
relations: [
{
type: Backbone.HasOne,
key: 'pilot_id',
relatedModel: app.Pilots,
],
wait: true
});
app.FlightList= Backbone.Collection.extend({
model: app.Flight,
url: POST_SUBMITTER.root + 'cloud_base/v1/flights',
}) ;
app.FlightsView = Backbone.View.extend({
el: '#flights',
localDivTag: '#addFlight Div',
preinitialize(){
this.collection = new app.FlightList();
},
initialize: function(){
this.collection.fetch({reset:true});
this.render();
this.listenTo(this.collection, 'add', this.renderItem);
this.listenTo(this.collection, 'reset', this.render);
},
render: function(){
this.collection.each(function(item){
this.renderItem(item);
}, this );
},
renderItem: function(item){
var expandedView = app.FlightView.extend({ localDivTag:this.localDivTag });
var itemView = new expandedView({
model: item
})
this.$el.append( itemView.render().el);
}
});
new app.FlightsView();
Flights模型有一个指针,通过一个键'pilot_id'
指向Pilots模型。Pilots模型将有一个Pilot的名字。在这里的某个地方, Backbone.js 需要从Pilots RESTful端点获取Pilot数据。但是我不知道在哪里/如何触发该获取。
1条答案
按热度按时间fzsnzjdm1#
我无法让Backbone.RelationalModel按我预期的方式工作。所以我删除了RelationalModel。
我想出来的是,我为飞行员模型添加了一个集合:
(从模型中删除URL。)然后在FlightsView中更改了我的initialize方法:
然后在渲染函数中,我使用飞行模型中的'pilot_id'作为我进入飞行模型的关键字,将飞行集合复制到飞行集合:
现在我的飞行模型有了飞行员的名字和姓氏。{silent:true}导致 Backbone 网在设置该值时不会触发事件。无论如何,当收到飞行员姓名时,REST端点都会忽略它。我可以创建和编辑飞行,而不必重新加载飞行员集合。新的飞行员不能通过此接口添加,当添加一个飞行员时,重新加载此应用程序对我的应用程序来说没有什么大不了的。
也许有更好的办法,但这对我很有效。