gpt4 book ai didi

ember.js - EmberJS 和 WebSocket |最好的方法?

转载 作者:行者123 更新时间:2023-12-02 08:00:53 24 4
gpt4 key购买 nike

我有一个无法正确回答的问题,也许是因为我缺乏 EmberJS 的经验。

我必须在 EmberJS 中开发一个管理界面,使用 Symfony 2 作为后端,它的行为和感觉应该像一个桌面应用程序。到目前为止一切顺利,但由于很多人都会使用此应用程序内的数据,我真的很想使用 EmberJS 的 WebSocket 适配器实现,因为每个连接的客户端都应该立即(或尽快)了解实体的更改。我可以为 EmberJS 编写一个 WebSocket 适配器,但我的问题是,WebSocket 将执行比 RESTful 操作更多的操作,而且服务器将在没有任何 EmberJS 请求的情况下发送消息(例如,实体发生更改,服务器向所有客户端广播此更改)。这意味着我需要一个基于 RESTful 操作的“命令”结构,根据我的经验,该结构无法与纯 DS 适配器一起使用。

例如:

也许我会触发一个 Controller 方法,该方法将发送如下 websocket 消息:

{命令:“say”,参数:{消息:“大家好!”} }

此命令与实体 (DS) 无关,并且永远不会进入应用程序商店。

另一个例子是这样的:

{命令:“加载实体”,参数:{type:“Vendor\Bundle\Entity\Type”,id:43} }

这将加载应存储在应用程序商店中的实体。

嗯,正如我所说,我对 EmberJS 不太熟悉,我无法找出最好的方法。我是否应该完全绕过 DS 适配器并在加载实体后检查“isDirty”并仅检查推送方法?我很高兴你有任何想法!

最佳答案

据我了解您的问题,您想将更改从后端推送到单页应用程序吗?

您可以使用 self.store.push('modelName', json) 将自定义 JSON 推送到 Ember 中的应用程序存储中。看看docs为了更好的理解。

例如,如果您的服务器通过 websocket 向您发送 JSON,如下所示

{ 
- "message": {
"type": "fooModel",
"data": {
... // Model attributes here
}
}
}

您可以将数据推送到您的商店中。例如,以下代码片段适用于 SocketIO:

App.ApplicationRoute = Ember.Route.extend({                                                              
activate: function() {
// connect to the websocket once we enter the application route
var socket = window.io.connect('http://localhost:8080');

var self = this;

socket.on('message', function(data){
self.store.push(data.type, data.item);
});
}
});

您可以轻松修改此代码片段以满足您的需求。

关于ember.js - EmberJS 和 WebSocket |最好的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22459010/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com