1

我在 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");
            }

       });

如果我追踪它,返回我一个空房间数组

4

1 回答 1

3

看起来你做对了。

  1. 检查您的网络选项卡 - 是否正在拨打电话,是否成功返回了 json?
  2. 在您订购您的收藏品之前,该收藏品是否已被填充 ( 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 调用并创建自己的调用,这很有用,但您应该听听 fetch 的successand errorhttp://backbonejs.org/#Collection-fetch

于 2013-07-02T20:12:36.957 回答