Tôi có một ứng dụng trong xương sống lấy dữ liệu từ một máy chủ. Dữ liệu này là khách sạn và khách sạn foreach tôi có nhiều phòng hơn. Tôi đã chia khách sạn thành một json và các phòng bên trong json khác như thế này:Backbone lồng nhau bộ sưu tập
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"
}
]
Tôi muốn lấy mỗi khách sạn và kết hợp với các phòng của nó (khóa ngoài vào rooms.json
hotel_id
) và in kết hợp các phòng: cấp độ kết hợp với các phòng khác nhau.
Một phòng cấp 1, một phòng của tầng 2 và một phòng cấp 3.
tối đa mức là 3 nhưng tôi có thể chỉ có một mức độ hoặc chỉ có hai cấp độ. Nếu tôi có 3 mức tôi không muốn sự kết hợp của cấp 1 và cấp 2 mà không cấp 3.
Something như thế này
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"
Các nhà xây dựng phòng này tôi nghĩ là để đưa vào renderRooms vào ứng dụng của tôi.
Đây là ứng dụng của tôi:
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")
});
Làm thế nào tôi có thể tạo ra sự kết hợp phòng này và in nó?
Có cách nào hay cách nào tốt hơn?
Tôi đã theo dõi câu hỏi khác của bạn về vấn đề này và có vẻ như bạn đã có một số vấn đề mà bạn đang cố gắng để làm việc ra ngoài. Những gì bạn thực sự cần là hàm cartesian mà @Bergi đề xuất trong câu hỏi này http://stackoverflow.com/questions/17417589/recursive-function-jquery-with-backbone. Tôi sẽ tiếp tục xuống con đường đó. –
Tôi đã thử nhưng có vẻ như không hoạt động, mảng nhóm đầu tiên trống rỗng Tôi không biết tại sao .. @moderndegree –
Tôi đã gửi bản cập nhật cho câu trả lời của @ Bergi cho câu hỏi này (http://stackoverflow.com/ câu hỏi/17417589/đệ quy-chức năng-jquery-với-xương sống). Trong thời gian chờ đợi, bạn có thể xem ví dụ hoạt động tại đây: http://plnkr.co/edit/NHE9V5?p=preview. –