我正在使用Ember开发一个简单的网络聊天系统。
我有一条/chatrooms
列出了几个聊天室的路线,然后我也要/chatrooms/:chatroom_id
显示带有消息的实际聊天室。
第二条路线在第一条路线之内,如下所示:
this.resource('chatrooms', function() {
this.route('show', {
path: ':chatroom_id'
});
});
当我访问时/chatrooms
,将调用服务器(/api/chatrooms
),如预期那样,将返回并显示房间列表。
当我单击一个房间时,应用程序将转换为/chatrooms/id
,但是/api/chatrooms/id
即使我尝试定义模型,也不会进行调用来检索消息(位于)。
我与用户有类似的情况。检索用户列表,然后显示。单击名称后,将显示配置文件。没有第二个电话,但这没关系,因为Ember已经知道有关用户的所有信息。
在我当前的情况下,第一次返回列表时,它包括除消息外的所有信息。我相信否则会太多(10个聊天室* 100条最后一条消息=每个请求中JSON中的1000个元素)。因此,我只想在选择聊天室时才调用服务器的消息。
您知道该怎么做,或者也许我一开始做错了什么?
更新
来自的模板代码 app/templates/chatrooms.hbs
<h1>Chatrooms</h1>
<ul class="sub-menu nobullet flex mas">
{{#each chatroom in model}}
<li class="mrs">{{link-to chatroom.name "chatrooms.show" chatroom class="pat"}}</li>
{{/each}}
</ul>
{{outlet}}
在这种情况下,模型是一系列聊天室。
我的路线:
app / routes / chatrooms.js
export default Ember.Route.extend({
model: function() {
return this.store.find('chatroom');
}
});
app / routes / chatrooms / show.js
export default Ember.Route.extend({
model: function(params) {
return this.store.get('chatroom', params.chatroom_id);
},
actions: {
send: function() {
...
}
}
});
最后,我为聊天室的JSON响应添加了一个links属性。当必须显示聊天室的内容时,将使用链接并检索消息。它只需要两个请求,并且不需要从所有聊天室预加载所有消息,也不需要为每个消息都发出请求。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句