Ember.js 如何组织我的模型
我尝试建立一个简单的聊天。用户可以选择另一个进行对话。我使用火基的余烬。我已经构建了类似firebase示例的模型 这是我的简单模型。 用户模型:Ember.js 如何组织我的模型,ember.js,firebase,emberfire,Ember.js,Firebase,Emberfire,我尝试建立一个简单的聊天。用户可以选择另一个进行对话。我使用火基的余烬。我已经构建了类似firebase示例的模型 这是我的简单模型。 用户模型: import DS from "ember-data"; var user = DS.Model.extend({ name : DS.attr('string'), messages : DS.hasMany("message", {async : true, inverse : 'owner'}) }); export def
import DS from "ember-data";
var user = DS.Model.extend({
name : DS.attr('string'),
messages : DS.hasMany("message", {async : true, inverse : 'owner'})
});
export default user;
消息模型:
import DS from "ember-data";
var message = DS.Model.extend({
date : DS.attr('date'),
content : DS.attr('string'),
owner : DS.belongsTo('user', {async : true}),
target: DS.belongsTo('user', {async : true})
});
export default message;
Emberfire不支持“findQuery”ember数据类型搜索,因此如何检索属于对话的所有邮件?这是定义我的模型的正确方法,还是有其他方法?在理想情况下,我只希望通过一个请求检索所有消息。(从所有者到目标,从目标到所有者)如果您坚持官方的emberfire绑定,您可以设置三个模型: 用户: 对话:
var conversation = DS.Model.extend({
messages : DS.hasMany('message', { embedded: true })
});
信息:
var message = DS.Model.extend({
date : DS.attr('date'),
content : DS.attr('string'),
from : DS.belongsTo('user', { async : true })
});
然后设置嵌入式Convas_用户索引:
var convos_users = DS.Model.extend({
with : DS.belongsTo('user', {async : true}),
conversation : DS.belongsTo('conversation', { async: true })
});
因此,在firebase中生成的模式类似于以下内容:
{
'users': {
'user_1': {
'name': 'Terrance',
'conversations': {
'convo_1': true
},
'convo_users': {
0: {
'with': 'user_2',
'conversation': 'convo_1'
},
...
}
},
'user_2': {
'name': 'Phillip',
'conversations': {
'convo_1': true
},
'convo_users': {
0: {
'with': 'user_1',
'conversation': 'convo_1'
},
...
}
},
...
},
'conversations': {
'convo_1': {
'messages': {
0: {
'date': 123456789,
'content': 'Hey buddy!',
'from': 'user_1'
},
1: {
'date': 123456789,
'content': 'Hey guy!',
'from': 'user_2'
},
...
}
}
}
}
此设置允许您将消息嵌入到一个公共对话线程中,因此您只检索要查看的对话的消息。消息中的“from”属性允许您呈现消息来源的用户,并对聊天窗口的对齐方式进行排序,或者执行您希望执行的任何操作
最后,索引用户曾经参与过的对话列表,以及对话中其他用户id和该对话id的索引。这样,当用户A向用户B发送消息时,您可以在“用户对话”索引上进行计算查找。如果存在匹配项,请使用找到的会话ID打开会话,并将消息附加到会话的嵌入消息数组中:
actions: {
sendMessage: function(msg) {
var userX = this.current_user.get('convos_users').findBy('with','user_X');
// No User
if (!userX) {
// 1. Create a new Conversation (var myRoom)
// 2. Save room id to users
// 3. Save room to your conversations model list
}
// Else
myRoom.messages.pushObject(msg);
myRoom.save();
}
}
}
祝你好运 真的很好。谢谢。
actions: {
sendMessage: function(msg) {
var userX = this.current_user.get('convos_users').findBy('with','user_X');
// No User
if (!userX) {
// 1. Create a new Conversation (var myRoom)
// 2. Save room id to users
// 3. Save room to your conversations model list
}
// Else
myRoom.messages.pushObject(msg);
myRoom.save();
}
}