jquery - 主干组按集合下划线

标签 jquery backbone.js underscore.js

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

       });

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

最佳答案

看来您做得对。

  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 调用并创建自己的 ajax 调用,那么它很有用,但您应该监听 fetch 的 successerrorhttp://backbonejs.org/#Collection-fetch

关于jquery - 主干组按集合下划线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17434523/

相关文章:

javascript - Backbone 和 Express 路由器可以在 Express 应用程序中协同工作吗?

jQuery CLICK 事件未触发(切换到悬停时,它确实有效)

jquery - 如何在页面中居中 <ul> ?

javascript - 首次使用后如何触发 Google Places 自动完成结果下拉列表?

javascript - 主干中的 OnBlur 事件

javascript - 什么 Javascript 框架最适合这种情况?

jquery - 显示单击的图像的 ID

javascript - 相当于jquery中underscore.js的find

javascript - 对象属性的深度过滤

javascript - 防止前端lodash和下划线冲突