主干嵌套集合
Backbone nested collection
我在主干网中有一个从服务器检索数据的应用程序。这些数据是酒店和每个酒店我有更多的房间。我把酒店分为一个json和另一个json内的房间,如下所示:
hotel.json
[
{
"id": "1",
"name": "Hotel1"
},
{
"id": "2",
"name": "Hotel2"
},
{
"id": "3",
"name": "Hotel3"
}
]
rooms.json
[
{
"id" : "r1",
"hotel_id" : "1",
"name" : "Singola",
"level" : "1"
},
{
"id" : "r1_1",
"hotel_id" : "1",
"name" : "Doppia",
"level" : "2"
},
{
"id" : "r1_3",
"hotel_id" : "1",
"name" : "Doppia Uso singol",
"level" : "1"
},
{
"id" : "r2",
"hotel_id" : "2",
"name" : "Singola",
"level" : "1"
},
{
"id" : "r2_1",
"hotel_id" : "2",
"name" : "Tripla",
"level" : "1"
}
]
我想把每个酒店和它的房间组合起来(外部键输入rooms.json
hotel_id
),并打印房间的组合:每个级别组合不同的房间。
一层一间、二层一间和三层一间。
级别的最大值是3,但我只能有一个级别或只有两个级别。如果我有3级,我不希望没有3级的1级和2级的组合。
像这样的
Room "Single", "level" : "1" , "hotel_id" : "1"
Room "Double", "level" : "2" , , "hotel_id" : "1"
Room "Triple", "level" : "3" , , "hotel_id" : "1"
Room "Double for single", "level" : "1" , "hotel_id" : "1"
Room "Double", "level" : "2" , , "hotel_id" : "1"
Room "Triple", "level" : "3" , , "hotel_id" : "1"
我认为这个房间的构造函数是将renderRooms放入我的应用程序中。
这是我的应用程序:
var Room = Backbone.Model.extend();
var Rooms = Backbone.Collection.extend({
model: Room,
url: "includes/rooms.json"
});
var Hotel = Backbone.Model.extend({
defaults: function() {
return {
"id": "1",
"name": "Hotel1",
"rooms": []
}
}
});
var HotelCollection = Backbone.Collection.extend({
model: Hotel,
url: "includes/test-data.json",
initialize: function() {
console.log("Collection Hotel initialize");
}
});
var HotelView = Backbone.View.extend({
template: _.template($("#hotel-list-template").html()),
initialize: function() {
this.collection = new HotelCollection();
this.collection.bind('sync', this.render, this);
this.collection.fetch();
},
render: function() {
console.log('Data hotel is fetched');
this.bindRoomToHotel();
var element = this.$el;
element.html('');
},
bindRoomToHotel: function() {
allRooms = new Rooms();
allRooms.on("sync", this.renderRooms, this)
allRooms.fetch();
},
renderRooms: function() {
$(this.el).html(this.template({ hotels: this.collection.models }));
}
});
var hotelView = new HotelView({
el: $("#hotel")
});
如何创建此房间组合并打印
有没有好的方法或更好的方法?
以下是如何构建Collections:
HotelModel = Backbone.Model.extend({
initialize: function() {
// because initialize is called after parse
_.defaults(this, {
rooms: new RoomCollection
});
},
parse: function(response) {
if (_.has(response, "rooms")) {
this.rooms = new RoomCollection(response.rooms, {
parse: true
});
delete response.rooms;
}
return response;
},
toJSON: function() {
var json = _.clone(this.attributes);
json.rooms = this.rooms.toJSON();
return json;
}
});
RoomModel = Backbone.Model.extend({
});
HotelCollection = Backbone.Collection.extend({
model: HotelModel
});
RoomCollection = Backbone.Collection.extend({
model: RoomModel
});
然后你可以做这样的事情:
var hotels = new HotelCollection();
hotels.reset([{
id: 1,
name: 'Hotel California',
rooms: [{
id: 1,
name: 'Super Deluxe'
}]
}], {
parse: true // tell the collection to parse the data
});
// retrieve a room from a hotel
hotels.get(1).rooms.get(1);
// add a room to the hotel
hotels.get(1).rooms.add({id:2, name:'Another Room'});
相关文章:
- React:使用索引变量更新嵌套集合
- 显示嵌套json集合的主干
- 通过对象的嵌套集合进行递归总是在第一个叶节点处终止
- 如何处理嵌套在关系模型中的集合
- 帆嵌套集合
- 在嵌套对象(例如 Backbone.js集合)中搜索文本
- 有关为嵌套集合构建模板的建议
- 具有深度嵌套集合的 Angular 性能和数据绑定
- 木偶.js复合视图 - 如何在不嵌套的情况下渲染模型和集合
- 当更新流星中的嵌套集合时,如何为更新路径传递变量
- 将嵌套文档集合转换为具有父引用的模型树结构
- 正在重新构造数组的嵌套集合
- 使用嵌套的“”循环迭代流星中的集合;forEach”;
- 主干保存嵌套集合
- 如何处理backbone.js中的嵌套集合
- 我应该使用嵌套集合来组织我的backbone.js应用程序吗
- Symfony 2:如何处理表单中的嵌套集合
- JS/MongoDB:检查对象(集合文档)中是否存在嵌套字段
- 主干嵌套集合
- 如何使用SailsJS填充嵌套的相关集合?