首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >不要在更改上呈现主干木偶集合视图?

不要在更改上呈现主干木偶集合视图?
EN

Stack Overflow用户
提问于 2014-03-26 18:13:15
回答 1查看 489关注 0票数 1

在使用socket.io进行实时消息处理的应用程序上,我还需要保存这些消息。我选择使用mongodb,在客户端,我使用主干。

我的问题是,当我发出一条新消息时,所有套接字/用户都会实时收到消息,但是发送消息的套接字/用户会得到两次,一次来自套接字,一次来自集合重新呈现。

这是我的收藏视图的样子。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
module.exports = CollectionView = Marionette.CollectionView.extend({

    className: 'collection',
    initialize: function() {
        //this.listenTo(this.collection, 'change', this.render);
    },
    itemView: MessageView

}); 

我把this.listenTo(this.collection, 'change', this.render);评论掉了。所以我问这个问题是因为在默认情况下,木偶会呈现CollectionView?也许有人解释了我如何防止发送消息的套接字/用户被追加两次?

编辑:只是有了一个想法,而不是附加消息,我可以在创建新消息时获取集合吗?我试过了,也许有更好的方法?我仍然在思考,并且对新的想法持开放态度!

编辑:,这对我来说很管用。我只是向所有连接的套接字发出一个GET请求,而不是追加html,这样它们就可以获得新的数据。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
createMessage: function(data) {
    window.App.data.messages.fetch({
        success: function() {
            console.log('success')
        }
    }); 
    //this.$el.find('.message-content').append('<div class="message"><b>'+data.username+':</b>'+data.message+'</div>');
    window.App.core.vent.trigger('app:log', 'Chat View: Received a new message!');
}

唯一的问题是上面的顺序是POST,然后在彼此之间的毫秒内得到,所以GET请求可能会在文章完全完成之前返回数据。

因此,我试图弄清楚如何设置回调,这样当POST成功地添加到集合时,就可以获得GET。如果我想办法的话,我会分享这个解决方案的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-28 03:57:55

您没有显示socket.io客户端代码,但我认为第二种方法更好。套接字只应发送/接收数据。我假设您的套接字中至少有一个事件是"receiveMessage“的,而一个事件是"sendMessage”的。

我想你可以,在你的客户端套接字上:

  1. 当收到一条消息(或者通知我我有一条新消息)时,使用Collection.add( message )将消息添加到您的集合中。木偶会给你传达这个信息的。
  2. 发送消息时,只需将其添加到集合中,或等待来自服务器的回调(请参阅文档),以确保在添加到集合之前正确地接收到该消息。

如果您使用的是Marionette视图,永远不要用jQuery在视图的HTML中添加一些东西!)

对于初始消息加载,第一次使用Collection.fetch() (例如,一旦连接套接字)来获取服务器上已经存在的所有消息。从那时起,在消息出现时添加单独的消息,而不是全部获取它们(您将保存bandwith)。

在类似的应用程序中,我所做的是在第一个连接时从套接字发送一个"Hello“消息,其中包括我需要的数据。然后,我只使用从套接字发送的内容来处理Collection.reset(数据),这样就可以了。套接字将初始化集合并每次更新一条消息。

希望能帮上忙!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22676996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文