我在 Backbone 中有一个应用程序,其外部 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"
}
]
我想解析并获取它,并在 groupBy 之后按 hotel_id 并创建一个按级别分组的数组..
我已经尝试过,但我有空数组:
var Room = Backbone.Model.extend();
var Rooms = Backbone.Collection.extend({
model:Room,
url : "includes/rooms.json"
});
var RoomView = Backbone.View.extend({
initialize: function(){
allRooms = new Rooms();
allRooms.on("sync", this.render, this)
allRooms.fetch();
},
render: function(){
var rooms = _.groupBy(allRooms.models,'hotel_id');
for (var hotelid in rooms)
rooms[hotelid] = _.groupBy(rooms[hotelid], "level");
}
});
如果我追踪它,请返回一个空的房间数组
最佳答案
看来您做得对。
- 检查您的网络选项卡 - 是否正在进行调用以及 json 是否已成功返回?
- 在订购集合之前,集合是否已填充(
console.log it
)
// Define the model
var Room = Backbone.Model.extend();
// Define the collection
var Rooms = Backbone.Collection.extend(
{
model: Room,
url: 'includes/rooms.json',
});
// Define the View
var RoomsView = Backbone.View.extend({
roomCollection: null,
initialize: function() {
this.roomCollection = new Rooms;
var that = this;
this.roomCollection.fetch({
success: function () {
that.render();
}
});
},
render: function() {
console.log(this.roomCollection.toJSON());
// Note: Haven't tested your logic
var rooms = _.groupBy(this.roomCollection.models,'hotel_id');
for (var hotelid in rooms)
rooms[hotelid] = _.groupBy(rooms[hotelid], 'level');
console.log(rooms);
}
});
我注意到的一件事是,您正在监听 sync
- sync
是执行 ajax 调用的方法。如果您想覆盖 ajax 调用并创建自己的 ajax 调用,那么它很有用,但您应该监听 fetch 的 success
和 error
。 http://backbonejs.org/#Collection-fetch
关于jquery - 主干组按集合下划线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17434523/