因此,我尝试使用木偶和骨干网与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-2
和User-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)这一般看起来非常混乱。
我应该以不同方式构建数据吗?我意识到至少可以通过我收集对话的方式进行改进,这样我就可以得到一个数组。
我做错了什么?任何建议都将不胜感激。