具有骨干和一对多关联的Firebase

时间:2015-03-02 02:38:28

标签: backbone.js firebase

因此,我尝试使用木偶和骨干网与firebase构建一对一的聊天应用程序。我也在使用Firebase Backbone绑定。我希望有很多用户,每个用户都有很多对话,每个对话都有很多消息。以下是我的数据的外观:

users: {
  'user-id-1': {
    email: 'test@whatever.com',
    conversations: {
      'conversation-id-1': true,
      'conversation-id-2': true
    }
  },

  'user-id-2': {
    email: 'another@email.com',
    conversations: {
      'conversation-id-1': true,
    }
  },

  'user-id-3': {
    email: 'a-third@email.com',
    conversations: {
      'conversation-id-2': true,
    }
  }
}

conversations: {
  'conversation-id-1': {
    sender: 'user-id-1',
    receiver: 'user-id-2',
    messages: {
      'message-id-1': true,
      'message-id-2': true
    }
  },

  'conversation-id-2': {
    sender: 'user-id-1',
    receiver: 'user-id-3',
    messages: {
      'message-id-3': true,
      'message-id-4': true,
      'message-id-5': true,
    }
  }
}

messages: {
  'message-id-1': {
    sender: 'user-id-1'
    body: 'A message'
  },

  'message-id-2': {
    sender: 'user-id-2'
    body: 'A response'
  },

  'message-id-3': {
    sender: 'user-id-1'
    body: 'An inital message'
  },

  'message-id-4': {
    sender: 'user-id-3'
    body: 'Another response'
  },

  'message-id-5': {
    sender: 'user-id-1'
    body: 'Goodbye'
  },
}

您可以从中看到:

User-1有两个不同的对话,每个对话都有User-2User-3

在一个非常基本的层面上,我可以使用如下函数从用户那里获取所有会话:

class Entities.User extends Backbone.Firebase.Model
  urlRoot: 'https://my-app.firebaseio.com/users'

  conversations: ->
    conversations = new Firebase('https://my-app.firebaseio.com/conversations')
    @firebase.child('conversations').on 'child_added', (snap) =>
      console.log snap.key()
      conversations(snap.key()).once 'value', (value) =>
        console.log value.val()
    undefined

这将记录firebase检索到的所有会话。

问题是:

a)我没有真正的方法可以在这里使用Backbone.Collection来获取这个用户的对话,更不用说那个对话的消息了吗?我需要一个集合传递给Marionettes CollectionView b)这一般看起来非常混乱。

我应该以不同方式构建数据吗?我意识到至少可以通过我收集对话的方式进行改进,这样我就可以得到一个数组。

我做错了什么?任何建议都将不胜感激。

0 个答案:

没有答案