मेरे पास रीढ़ की हड्डी में एक ऐप है जो सर्वर से डेटा पुनर्प्राप्त करता है। यह डेटा होटल और foreach होटल हैं मेरे पास और अधिक कमरे हैं। मैं इस तरह एक और 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
) और कमरे के संयोजन को मुद्रित करें: foreach स्तर विभिन्न कमरे गठबंधन। स्तर 1 का
एक कमरे में, स्तर 2 में से एक कमरा और स्तर के एक कमरे 3.
स्तर की अधिकतम 3 है, लेकिन मैं केवल एक ही स्तर या केवल दो स्तर हो सकता है। अगर मैं 3 स्तर है मैं नहीं चाहता कि स्तर 1 और स्तर 2 के संयोजन के स्तर के बिना चाहते 3.
कुछ इस
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"
इस कमरे मुझे लगता है कि है की निर्माता की तरह मेरे ऐप में रेंडर करने के लिए रेंडर करने के लिए।
यह मेरी अनुप्रयोग है:
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")
});
कैसे मैं इस कमरे संयोजन बना सकते हैं और इसे प्रिंट कर सकते हैं?
क्या कोई अच्छा तरीका है या कुछ बेहतर है?
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
});
तो फिर तुम कुछ इस तरह कर सकते हैं::
मैं इस मुद्दे के बारे में अपने अन्य प्रश्न निम्नलिखित किया गया है और यह आप की तरह दिखाई देता आपको कई समस्याएं मिली हैं जिन्हें आप काम करने की कोशिश कर रहे हैं। आपको वास्तव में क्या चाहिए वह कार्टेशियन फ़ंक्शन है जिसे @Bergi ने इस प्रश्न में सुझाव दिया है http://stackoverflow.com/questions/17417589/recursive-function-jquery-with-backbone। मैं उस रास्ते को जारी रखूंगा। –
मैंने पहले से ही कोशिश की है लेकिन ऐसा लगता है कि काम नहीं करता है, पहले समूह की सरणी खाली है मुझे नहीं पता क्यों .. @moderndegree –
मैंने इस प्रश्न के लिए @ बर्गी के उत्तर में एक अपडेट सबमिट किया है (http://stackoverflow.com/ प्रश्न/17417589/पुनरावर्ती कार्य-jQuery-साथ-रीढ़ की हड्डी)। इस बीच, आप यहां एक कार्य उदाहरण देख सकते हैं: http://plnkr.co/edit/NHE9V5?p=preview। –